ちょっと、私はフレームの減算を示すヒストグラムを作ろうとしましたが、コードは実行されていますが、結果のないグレーのウィンドウがあります。 コマンドウィンドウのメッセージは次のとおりです。 コンパイラがスタック変数を揃えませんでした。 Libavcodecは にコンパイルされており、非常に遅いかクラッシュする可能性があります。これはlibavcodecのバグではなく、 ですが、コンパイラにあります。 gcc> = 4.2を使って再コンパイルしてみてください。 FFmpeg開発者にクラッシュを報告しないでください。 OpenCVエラー:アサーションに失敗しました(画像[j] .channels()== 1)不明な関数、 ファイル........ \ ocv \ opencv \ src \ cv \ cvhistogram.cpp、行137ヒストグラムon opencv
ここは、コード誰かがアイデアを持っているのですか?助けてくれてありがとう.....
int main()
{
int key = 0;
CvCapture* capture = cvCaptureFromAVI("macroblock.mpg");
IplImage* frame = cvQueryFrame(capture);
IplImage* currframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,3);
IplImage* destframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,3);
IplImage* imgHistogram = 0;
CvHistogram* hist;
if (!capture)
{
fprintf(stderr, "Cannot open AVI!\n");
return 1;
}
int fps = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
cvNamedWindow("dest", CV_WINDOW_AUTOSIZE);
cvNamedWindow("imgHistogram", CV_WINDOW_AUTOSIZE);
while(key != 'x')
{
frame = cvQueryFrame(capture);
currframe = cvCloneImage(frame);
frame = cvQueryFrame(capture);
cvSub(frame,currframe,destframe);
int bins = 256;
int hsize[] = {bins};
float max_value = 0, min_value = 0;
float value;
int normalized;
float xranges[] = {0, 256};
float* ranges[] = {xranges};
IplImage* planes[] = {destframe};
hist = cvCreateHist(1, hsize, CV_HIST_ARRAY, ranges,1);
cvCalcHist(planes, hist, 0, NULL);
cvGetMinMaxHistValue(hist, &min_value, &max_value);
// printf("Minimum Histogram Value: %f, Maximum Histogram Value: %f\n", min_value, max_value);
imgHistogram = cvCreateImage(cvSize(bins, 50),IPL_DEPTH_8U,3);
cvRectangle(imgHistogram, cvPoint(0,0), cvPoint(256,50), CV_RGB(255,255,255),-1);
for(int i=0; i < bins; i++){
value = cvQueryHistValue_1D(hist, i);
normalized = cvRound(value*50/max_value);
cvLine(imgHistogram,cvPoint(i,50), cvPoint(i,50-normalized), CV_RGB(0,0,0));
}
if(key==27)break;
cvShowImage("dest",destframe);
cvShowImage("imgHistogram",imgHistogram);
key = cvWaitKey(1000/10);
}
cvDestroyWindow("dest");
cvReleaseCapture(&capture);
return 0;
}