编译器没有对齐堆栈变量。 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;
}
答案 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())
断言失败似乎是我所解释的明确指标。