OpenCV2.4从视频中捕获帧的可能错误

Jav*_*ock 5 c++ opencv ffmpeg

可能是OpenCV2.4 highgui中存在一个错误,用于从Windows中的视频捕获帧?

我安装了两个预编译库,我编译的库,我可以完美地编译所有内容,如果我可以运行我的程序

它们是基于图像的.问题仅适用于视频.OpenCV总是崩溃在这个函数中:

 virtual IplImage* retrieveFrame(int)
    {
        unsigned char* data = 0;
        int step=0, width=0, height=0, cn=0;

        if(!ffmpegCapture ||
           !icvRetrieveFrame_FFMPEG_p(ffmpegCapture,&data,&step,&width,&height,&cn)) <-------CRASHES HERE
           return 0;
        cvInitImageHeader(&frame, cvSize(width, height), 8, cn);
        cvSetData(&frame, data, step);
        return &frame;
    }
Run Code Online (Sandbox Code Playgroud)

这是在类cap_ffmpeg.cpp中,由VideoCapture调用.

我尝试了2.4.2和2.4.9版本.我的程序正在使用opencv2工作


更多信息

  • Windows 7的

  • 使用cmake构建项目(很重要,因为可能是cmake没有构建/找到正确的编解码器)

  • VisualStudio 9 2008

  • OpenCV 2.4.2

编辑

看起来它实际上是一个bug,所以,我怎样才能解决这个问题并更改我的代码以便能够读取avi文件?

Jav*_*ock 5

作为临时解决方案,我决定重新编码视频,以便OpenCV不使用ffmpeg.我使用VirtualDubmicrosoft video 1压缩,它使用"msvidc32.dll"驱动程序.

它适用于我的所有视频,所以现在已足够,因为我可以继续在Windows中使用OpenCV.

在此输入图像描述