首页 文章

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

提问于
浏览
5

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

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

它们是基于图像的 . 问题仅适用于 videos . 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工作


More information

  • Windows 7

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

  • VisualStudio 9 2008

  • OpenCV 2.4.2

EDIT

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

3 回答

  • 1

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

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

    enter image description here

  • 1

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

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

  • 5

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

相关问题