5

会不会是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;
    }

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

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


更多信息

  • Windows 7的

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

  • 视觉工作室 9 2008

  • OpenCV 2.4.2

编辑

看起来它实际上是一个错误,那么,我该如何解决这个问题并更改我的代码以能够读取 avi 文件?

4

3 回答 3

5

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

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

在此处输入图像描述

于 2012-09-17T07:57:15.203 回答
1

我有类似的问题。我下载了 VirtualDub,但由于它的 FMP4 编码,它没有打开我的一个 avi 视频。所以最后解决问题的方法是安装ffdshow,一个windows的解码器。请参阅此链接:http ://www.movi​​ecodec.com/video-codecs/fmp4-codec-with-virtualdub-45814/

然后我不再需要使用 VirtualDub 来重新编码我的视频了!

于 2013-01-02T20:07:42.373 回答
1

如果您使用 x64。请使用opencv_ffmpeg245_64.dll 这个解决可能会解决问题。或者将 opencv_ffmpeg245_64.dll 重命名为 opencv_ffmpeg245.dll 可能会解决问题。

于 2013-09-23T10:46:43.020 回答