我刚刚用openCV2.3.1写了一个简单的视频阅读示例,但似乎无论如何我都无法打开avi视频:(
VideoCapture capture("guitarplaying.avi");
if(!capture.isOpened()){
std::cout<<"cannot read video!\n";
return -1;
}
Mat frame;
namedWindow("frame");
double rate = capture.get(CV_CAP_PROP_FPS);
int delay = 1000/rate;
while(true)
{
if(!capture.read(frame)){
break;
}
imshow("frame",frame);
if(waitKey(delay)>=0)
break;
}
capture.release();
我在 std::cout<<"cannot read video!\n"
做了一个断点,发现它每次都停在这里 . 那么为什么avi视频无法打开?谢谢!
11 回答
1)
确保视频文件实际上与应用程序位于同一文件夹中(我已尝试过此操作),否则请指定绝对路径 .
2)
如果您使用的是Windows,则可能需要使用编解码器包来读取视频文件(例如,K-Lite Codec Pack) .
正如Macmade所说,AVI只是一个容器,可以容纳不同的音频,视频,甚至是隐藏式字幕编解码器 . 此外,如果您执行以下操作,here是Zeranoe 's FFmpeg builds for Windows. You can get further information on your file'的编解码器内容:
您应该看到如下所示的输出:
因此,正如您所看到的,.mp4容器具有H.264视频编解码器和AAC音频编解码器 .
缺少OpenCV的ffmpeg.dll不会在OpenCV 2.3.1中生成任何警告/错误,并且代码无提示失败 . 确保路径中有正确的opencv_ffmpeg * .dll .
可能是你加载了错误的lib文件 . 就像我一样,我也遇到了同样的问题 . 但是我可以在VC6.0中打开使用opencv 1.0版的AVI文件 . 最后,我发现我使用了错误的lib .
在调试模式下,但我使用
opencv_core220.lib
和opencv_highgui220.lib
. 我用opencv_core220d.lib
和opencv_highgui220d.lib
替换它们 . 现在我可以读它 .在OpenCV 2.4.4中:只有opencv_ffmpeg244.dll(发布dll)而不是opencv_ffmpeg244d.dll(debug dll)
所以尝试在发布编译模式!
我也遇到了同样的问题 . 使用VideoCapture的示例代码,我的visual studio程序无法打开任何视频文件 . 然后,nimcap的建议对我有用 . “缺少OpenCV的ffmpeg.dll在OpenCV 2.3.1中不会产生任何警告/错误,代码会无声地失败 . 请确保路径中有正确的opencv_ffmpeg * .dll . ”
解决方案:将opencv_ffmpeg.dll复制到我的visual studio项目
/Debug
文件夹,我几乎可以使用VideoCapture打开任何视频文件 .在 Windows x64 下,您不必重命名任何内容 . 只需将以下 ...\opencv\build\x64\vc12\bin 放入 PATH 即可 .
只需更改您的代码:
对此:
我只是补充说,因为我花了更多的时间而不是承认 . 无法打开文件导致了大量奇怪的例外 .
如果您发现绝对路径有效,而相对路径不起作用,则要检查的另一件事是确保正确设置工作目录 .
在Visual Studio中,这是项目属性(配置属性) - >调试 - >工作目录 . 当我真的想要“$(OutDir)”时,我发现默认设置为“$(ProjectDir)” .
你需要从xvid.org下载你的机器Xvid,这就是全部:http://www.xvid.org/Downloads.15.0.html
打开
D:\OpenCV\build\x64\vc14\bin
并根据Windows (x86 or x64)
复制与您相关的opencv_ffmpeg320.dll
或opencv_ffmpeg320_64.dll
.opencv_ffmpeg320.dll
- > for32-bit Windows (x86)
opencv_ffmpeg320_64.dll
- > for64-bit Windows (x64)
将复制的
.dll
粘贴到C:\Python27\
或可从WindowsPATH
环境变量访问的任何位置 .或者,您可以创建一个文件夹
D:\OpenCV\vendor\
并将.dll
文件添加到该文件夹,然后将D:\OpenCV\vendor\
添加到您的windows environment variables
.如果您使用的是Ubuntu 16,可以试试这个: