我在最后一帧有Assertion失败错误,同时逐帧读取和写入视频。错误只显示在最后一帧,不知道为什么。看到这个答案here,这建议给出waitkey,我的代码已经有了等待键。
我的简单代码如下
int main()
{
CvCapture *capture=cvCaptureFromFile("C:\\vid\\op.mp4");
if(capture==NULL)
{
printf("can't open video");
}
Mat frame, first_frame,current_frame;
char buffer[100];
int frame_count=1,p=1;
while(1)
{
/*Getting the current frame from the video*/
frame=cvQueryFrame(capture);
cv::cvtColor(frame,current_frame,1); //saving current frame
sprintf(buffer,"C:\\frames\\image%u.jpg",p);
imwrite(buffer,current_frame);
p++;
waitKey(1);
}
return 0;
}
任何人请帮助
解决方案:我在读完每个文件后添加了一个检查 -
if(frame.empty()){
fprinf("cannot access frame");
return -1;
}
答案 0 :(得分:18)
您需要在每次查询后检查您的框架是否为空
像
frame=cvQueryFrame(capture);
if (frame.empty()) break;
您遇到这样的错误,因为您尝试在最后一帧之后将空Mat转换为灰度,因此如果帧为空则退出循环。