我刚用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视频无法打开?谢谢!
答案 0 :(得分:53)
缺少OpenCV的ffmpeg.dll在OpenCV 2.3.1中不会产生任何警告/错误,并且代码无提示失败。确保路径中有正确的opencv_ffmpeg * .dll。
答案 1 :(得分:4)
<强> 1)强>
确保视频文件实际上与应用程序位于同一文件夹中(我假设您已尝试过此操作),否则请指定绝对路径。
<强> 2)强>
如果您使用的是Windows,则可能需要使用编解码器包来阅读视频文件(例如K-Lite Codec Pack)。
正如Macmade所说,AVI只是一个可容纳不同音频,视频甚至隐藏式字幕编解码器的容器。此外,here是Zeranoe的Windows FFmpeg版本。如果执行以下操作,您可以获得有关文件编解码器内容的更多信息:
ffmpeg -i guitarplaying.avi
您应该看到如下所示的输出:
ffmpeg version 0.8.7.git, Copyright (c) 2000-2011 the FFmpeg developers
built on Dec 6 2011 09:20:43 with gcc 4.6.1
configuration: --pkg-config=pkg-config --enable-gpl --enable-version3 --enable
-nonfree --enable-runtime-cpudetect --enable-memalign-hack --enable-postproc --a
rch=x86 --target-os=mingw32 --cross-prefix=i686-w64-mingw32- --prefix=/home/wluc
as/ffmpeg-cross/build/deploy --enable-libx264 --enable-libvpx --enable-zlib --en
able-bzlib --enable-libxvid --enable-libfaac --enable-libmp3lame --enable-libvor
bis --enable-libtheora --enable-libopenjpeg --enable-libfreetype
libavutil 51. 30. 0 / 51. 30. 0
libavcodec 53. 40. 0 / 53. 40. 0
libavformat 53. 24. 0 / 53. 24. 0
libavdevice 53. 4. 0 / 53. 4. 0
libavfilter 2. 51. 0 / 2. 51. 0
libswscale 2. 1. 0 / 2. 1. 0
libpostproc 51. 2. 0 / 51. 2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '..\..\Videos\Sintel\sintel_trailer-720p
.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
creation_time : 1970-01-01 00:00:00
title : Sintel Trailer
artist : Durian Open Movie Team
encoder : Lavf52.62.0
copyright : (c) copyright Blender Foundation | durian.blender.org
description : Trailer for the Sintel open movie project
Duration: 00:00:52.20, start: 0.000000, bitrate: 1165 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720,
1033 kb/s, 24 fps, 24 tbr, 24 tbn, 48 tbc
Metadata:
creation_time : 1970-01-01 00:00:00
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, s16, 126
kb/s
Metadata:
creation_time : 1970-01-01 00:00:00
handler_name :
所以,你可以看到这个.mp4容器有一个H.264视频编解码器和一个AAC音频编解码器。
答案 2 :(得分:4)
可能是你加载了错误的lib文件。就像我一样,我也遇到了同样的问题。但我可以在VC6.0中打开使用opencv 1.0版的AVI文件。最后,我发现我使用了错误的lib。
在调试模式下,我使用opencv_core220.lib
和opencv_highgui220.lib
。我用opencv_core220d.lib
和opencv_highgui220d.lib
替换它们。现在我可以阅读它。
答案 3 :(得分:1)
在OpenCV 2.4.4中:只有opencv_ffmpeg244.dll(发布dll)而不是opencv_ffmpeg244d.dll(debug dll)
所以尝试在发布编译模式下!
答案 4 :(得分:1)
我也遇到了同样的问题。使用VideoCapture的示例代码,我的visual studio程序无法打开任何视频文件。然后,nimcap的建议对我有用。 &#34;缺少OpenCV的ffmpeg.dll在OpenCV 2.3.1中不会产生任何警告/错误,代码会无声地失败。确保你的路径中有正确的opencv_ffmpeg * .dll。&#34;
解决方案:将opencv_ffmpeg.dll复制到我的visual studio项目/Debug
文件夹,我几乎可以使用VideoCapture打开任何视频文件。
答案 5 :(得分:0)
在 Windows x64 下,您无需重命名任何内容。只需在路径中添加以下 ... \ opencv \ build \ x64 \ vc12 \ bin 。
答案 6 :(得分:0)
Just change your code from this:
VideoCapture capture("guitarplaying.avi");
to this:
CvCapture *input_video = cvCreateFileCapture("guitarplaying.avi");
答案 7 :(得分:0)
我只是加上这个,因为我花了更多的时间而不是承认。无法打开文件导致了大量奇怪的例外。
如果您发现绝对路径有效,而相对路径不起作用,另外要检查的是确保正确设置工作目录。
在Visual Studio中,这是项目属性(配置属性) - &gt;调试 - &gt;工作目录。我发现我的设置为&#34; $(ProjectDir)&#34;默认情况下,当我真的想要&#34; $(OutDir)&#34;。
答案 8 :(得分:0)
对于那些没有找到解决方案的人: 在 openCV4 和“调试”模式下,请执行以下步骤:
<块引用>转到 opencv\build\x64\vc15\bin
将“opencv_videoio_ffmpeg440_64.dll”复制到项目的调试文件夹中。
答案 9 :(得分:-1)
您只需从xvid.org下载您的计算机Xvid即可:http://www.xvid.org/Downloads.15.0.html
答案 10 :(得分:-1)
打开D:\OpenCV\build\x64\vc14\bin
并根据您的opencv_ffmpeg320.dll
复制与您相关的opencv_ffmpeg320_64.dll
或Windows (x86 or x64)
。
opencv_ffmpeg320.dll
- &gt; 32-bit Windows (x86)
opencv_ffmpeg320_64.dll
- &gt; 64-bit Windows (x64)
将复制的.dll
粘贴到C:\Python27\
或可从Windows PATH
环境变量访问的任何位置。
或者,您可以创建文件夹D:\OpenCV\vendor\
并将.dll
文件添加到该文件夹,然后将D:\OpenCV\vendor\
添加到windows environment variables
。
答案 11 :(得分:-1)
如果您使用的是Ubuntu 16+,则可以尝试以下操作:
pip安装opencv-python