第一次使用open cv无法播放avi文件

时间:2011-08-07 06:48:04

标签: opencv

int main()
    {
    cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE );
    CvCapture* capture = cvCaptureFromAVI( "a.avi" );
    IplImage* frame;

    if(!capture)
    {
        printf("fail");
    }
    else
    {

    while(1) 
    {
    frame = cvQueryFrame( capture );
    cvShowImage( "Example2", frame );
    char c = cvWaitKey(40);
    if( c == 27 ) break;
    }
    cvReleaseCapture( &capture );
    cvDestroyWindow( "Example2" );
    }
    return 0;
    }

我用open cv尝试的视频的帧速率是29帧/秒,帧宽是720,高度是480,视频的格式是带有avi包装的DX50

空白窗口显示名为example2,它消失了......

问题是cvcapturefromavi确实返回指针,这就是为什么不打印失败

操作系统窗口7

3 个答案:

答案 0 :(得分:0)

我试过我的电脑(用网络摄像头而不是使用cvCaptureFromCAM(-1)的文件)并且你的代码工作得很好,这就是你应该尝试的。

  • 文件“a.avi”不在您的可执行文件的路径中,也许您应该首先使用绝对路径来尝试类似“C:/MyVideos/a.avi”
  • 我会尝试使用cvCaptureFromFile()函数而不是cvCaptureFromAVI(),因为我在API文档(OpenCV C 2.1)中搜索并找不到任何cvCaptureFromAVI()函数(可能它存在但不推荐使用)记录)。
PS:你的代码中有一点错误,为什么你在else {}范围内使用cvDestroyWindow,它应该在你在主范围内创建窗口的主{}范围内。

PPS:请更好地缩进代码以提高可读性

于连

答案 1 :(得分:0)

我有同样的问题。据说问题出现是因为缺少必要的视频编解码器。建议使用“Mencoder”来编码avi文件以供OpenCV使用,但它没有解决我的问题,我仍然无法使用OpenCV 2.3.1播放avi文件。

我通过添加我的路径opencv_ffmpeg.dll解决了我的问题。希望它适用于面对这个问题的你和人民。

答案 2 :(得分:0)

如果你构建opencv到静态库,你会发现bin目录中仍然有一个dll文件“opencv_ffmpegxxxxx.dll”。即使您静态地将代码与opencv链接,也需要此dll。因此,请确保系统可以找到此dll文件。