2012-04-05 69 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