【问题标题】:Possible bug in OpenCV2.4 capturing frames from videoOpenCV2.4 从视频中捕获帧的可能错误
【发布时间】:2012-09-07 13:01:26
【问题描述】:

会不会是 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 可能没有构建/找到正确的编解码器)

  • VisualStudio 9 2008

  • OpenCV 2.4.2

编辑

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

【问题讨论】:

  • 为什么不呢?它是软件 :) 看起来像您描述的问题code.opencv.org/issues/2115
  • @Sergey hehe,是的,我相信,但它很痛苦。我需要发展,现在我必须与这种……耐心作斗争
  • 根据描述,您需要降级 2.4->2.1 或自行修复并发布补丁以帮助其他人 :) 据我所知,在 Windows 上使用 ffmpeg 是个坏主意。 AFAIR 它应该是 OpenCV 的 DirectDraw 捕获,但也许我错了。

标签: c++ opencv ffmpeg


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-11
        • 2013-03-18
        • 1970-01-01
        相关资源
        最近更新 更多