有谁知道为什么我一直得到空帧?我尝试跳过前五个仍然为空。
int _tmain(int argc, char** argv)
{
CvCapture *capture = cvCaptureFromFile(argv[1]);
int fps = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
IplImage* frame;
cvNamedWindow("video", CV_WINDOW_AUTOSIZE);
while(1)
{
frame = cvQueryFrame(capture);
if(!frame)
break;
cvShowImage("video", frame);
char c = cvWaitKey(1000/fps);
if(c == 33)
break;
}
cvReleaseCapture( &capture);
cvDestroyWindow( "video" );
return 0;
}
答案 0 :(得分:2)
视频文件必须是UNCOMPRESSED avi! 所以实际上我得到了空帧,因为cvCapture返回了一个null,因为我的输入视频文件没有被压缩。
答案 1 :(得分:1)
我使用您的代码进行测试,然后使用'xvid'格式视频运行良好。 我认为OpenCV'捕获'功能可能会处理一些流行的和旧的视频格式。 格式为“H264”的视频可能无效。
答案 2 :(得分:1)
当cvCaptureFromFile()
失败时,它会返回NULL
,我怀疑它失败了:
CvCapture *capture = cvCaptureFromFile(argv[1]);
if (!capture)
{
// print error, quit application
}
它通常因以下原因之一而失败:要么找不到文件,要么OpenCV不知道如何打开它。例如,OpenCV不支持.mkv
个文件。