是否存在 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文件?
答案 0 :(得分:5)
作为临时解决方案,我决定重新编码视频,以便OpenCV不使用ffmpeg。我使用 VirtualDub 和 microsoft video 1 压缩,它使用“msvidc32.dll”驱动程序。
它适用于我的所有视频,所以现在已足够,因为我可以继续在Windows中使用OpenCV。
答案 1 :(得分:1)
我有类似的问题。我下载了VirtualDub,但由于其FMP4编码,它没有打开我的一个avi视频。所以最后,解决问题的解决方案是安装ffdshow,一个用于windows的解码器。请看这个链接:http://www.moviecodec.com/video-codecs/fmp4-codec-with-virtualdub-45814/
然后我不再需要使用VirtualDub重新编码我的视频了!
答案 2 :(得分:1)
如果您使用的是x64。请使用opencv_ffmpeg245_64.dll这个解决可以解决问题。或者将opencv_ffmpeg245_64.dll重命名为opencv_ffmpeg245.dll可能会解决问题。