减法帧opencv

时间:2012-04-05 11:14:36

标签: opencv background-subtraction

嘿我试着在当前帧到之前的帧之间进行减法,(代码附加)代码运行但我得到错误和灰色窗口没有结果我得到的命令提示错误:

编译器没有对齐堆栈变量。 Libavcodec已被错误编译,可能非常慢或崩溃。这不是libavcodec中的错误,而是编译器中的错误。您可以尝试使用gcc> = 4.2重新编译。不要向FFmpeg开发人员报告崩溃情况。 OpenCV错误:断言失败(src1.size()== dst.size()&& src1.type()== dst.type())在未知函数中,文件........ \ 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;

}

1 个答案:

答案 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()) 

断言失败似乎是我所解释的明确指标。