2012-04-05 58 views
1

嘿,我想當前幀以前,(附代碼)的代碼之間做減法運行,但我得到沒有結果,我在命令提示符下得到了錯誤的錯誤和灰色窗口:減法幀OpenCV的

編譯器沒有調整堆棧變量。 Libavcodec已被編譯錯誤,可能非常緩慢或崩潰。這不是libavcodec中的錯誤,而是編譯器中的錯誤。您可以嘗試使用gcc> = 4.2進行重新編譯。不要向FFmpeg開發人員報告崩潰。 OpenCV錯誤:斷言失敗(src1.size()== dst.size()& & src1.type()== dst。type())in unknown function,file ........ \ ocv \ opencv \ src \ cxcore \ cxarithm.cpp,行1563.

有人有想法嗎?請你的幫助!謝謝

int main() 
{ 


int key = 0; 




CvCapture* capture = cvCaptureFromAVI("macroblock.mpg"); 
IplImage* frame = cvQueryFrame(capture); 
IplImage* currframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,1); 
IplImage* destframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,1); 

    if (!capture) 

{ 
    fprintf(stderr, "Cannot open AVI!\n"); 
    return 1; 
    } 

    int fps = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FPS); 

    cvNamedWindow("dest", CV_WINDOW_AUTOSIZE); 

    while(key != 'x') 
     { 
      frame = cvQueryFrame(capture); 
    currframe = cvCloneImage(frame);// copy frame to current 
    frame = cvQueryFrame(capture);// grab frame 
    cvSub(frame,currframe,destframe);// subtraction between the last frame to cur 

      if(key==27)break; 
      cvShowImage("dest",destframe); 
      key = cvWaitKey(1000/fps); 
      } 
     cvDestroyWindow("dest"); 
     cvReleaseCapture(&capture); 
     return 0; 

}

回答

3

的問題是在這裏

IplImage* currframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,1); 
IplImage* destframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,1); 

你在做什麼是你正在閱讀關閉該每幀具有3個通道的MPEG。現在,當您執行減法時,您將從1通道幀中減去3通道幀。這會導致問題。嘗試將通道數量設置爲3.然後查看它是否可以工作

IplImage* currframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,3); 
IplImage* destframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,3); 

可以肯定,請檢查查詢圖像的克隆圖像的通道數量。並且由於您正在將最終圖像推送到1個通道的目標圖像中。你正在破壞數據。如果在任何地方都沒有發現/捕獲異常。

OpenCV Error: Assertion failed (src1.size() == dst.size() && src1.type() == dst. type()) 

斷言失敗似乎是我已經解釋過的內容的明確標誌。

+0

非常感謝你! – 2012-04-05 11:57:35