0

有谁知道为什么我不断收到空帧?我尝试跳过前五个,但仍然为空。

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

3 回答 3

2

视频文件必须是 UNCOMPRESSED avi!所以实际上我得到了空帧,因为 cvCapture 返回了一个空值,因为我的输入视频文件没有解压缩。

于 2012-05-17T21:38:33.750 回答
1

我使用您的代码进行测试,然后它与“xvid”格式的视频一起运行良好。我认为 OpenCV 的“捕获”功能可能会处理一些流行和旧格式的视频。格式为“H264”的视频可能无法播放。

于 2012-05-17T05:32:28.237 回答
1

失败时cvCaptureFromFile()返回NULL,我怀疑它失败了:

CvCapture *capture  = cvCaptureFromFile(argv[1]);
if (!capture)
{
    // print error, quit application
}

它通常由于以下原因之一失败:它找不到文件,或者 OpenCV 不知道如何打开它。例如,.mkvOpenCV 不支持文件。

于 2012-05-17T13:06:40.460 回答