1
嘿我試圖做一個直方圖,顯示幀減法,代碼正在運行,但我得到了沒有結果的灰色窗口。 命令窗口中的消息是: 編譯器未對齊堆棧變量。 Libavcodec已被編譯錯誤 並可能非常緩慢或崩潰。這不是libavcodec, 中的錯誤,而是編譯器中的錯誤。您可以嘗試使用gcc> = 4.2進行重新編譯。 不要向FFmpeg開發人員報告崩潰。 OpenCV Error:Assertion failed(images [j] .channels()== 1)in unknown function, file ........ \ ocv \ opencv \ src \ cv \ cvhistogram.cpp,第137行直方圖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;
}