cvQueryFrame(capture)总是返回null

时间:2012-05-17 05:07:21

标签: c++ opencv video-capture

有谁知道为什么我一直得到空帧?我尝试跳过前五个仍然为空。

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;
}

3 个答案:

答案 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个文件。