2012-07-28 97 views
41

我使用Python绑定到OpenCV 2.4,安装了以下instructionsOpenCV 2.4 VideoCapture无法在Windows上工作

我的问题类似于this one,但我需要Windows机器解决方案。

问题:当我尝试使用

cap = cv2.VideoCapture(0) 
print cap.grab() 

它工作正常,但下面的代码

cap = cv2.VideoCapture(filename) 
print cap.grab() 

总是返回False。

该文件的路径是正确的,绝对的并且没有空格。

我试着在Windows XP和Windows 7的两台机器上得到类似的结果。在Linux(Ubuntu)上,它对我来说工作正常。

+0

你可以发布文件名的值吗?尝试使用'filename = os.path.join(filename)'。更多信息在这里:http://stackoverflow.com/questions/1633643/unix-paths-officially-work-in-python-for-any-platform – 2012-07-28 08:03:22

+0

它是'“C:\\ m.avi”',但我只是试过'“C:\ m.avi”'和'“C:/m.avi”'。它仍然没有工作(有和没有'os.path.join')。 – Bihaqo 2012-07-28 08:29:14

+1

检查opencv_ffmpeg.dll是否与python使用的其他OpenCV dll位于同一目录中。 另外,请尝试另一个avi文件。有时OpenCV无法解码其他程序正确播放的文件(例如Windows Media Player) – Piotr 2012-07-28 12:52:06

回答

67

C:\OpenCV\3rdparty\ffmpeg\添加到Windows PATH环境变量或将opencv_ffmpeg.dll从该目录复制到C:\Python27\或复制到PATH中的目录。或者,使用来自http://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv的OpenCV二进制文件。

重命名opencv_ffmpeg.dll文件也可能是必需的。

对于OpenCV的版本XYZ
opencv_ffmpeg.dll ==>opencv_ffmpegXYZ.dll

对于64位版本的OpenCV XYZ
opencv_ffmpeg.dll ==>opencv_ffmpegXYZ_64.dll

+4

谢谢!它的工作原理,但只有当你从'C:\ OpenCV \ 3rdparty \ ffmpeg \'复制_all_文件时,不仅仅是'opencv_ffmpeg.dll'。 – Bihaqo 2012-07-30 11:13:26

+2

请参阅下面的所有答案。看来需要将opencv_ffmpeg.dll文件重命名为OpenCV版本X.YZ的opencv_ffmpegXYZ.dll,如果使用64位版本,则需要重命名为opencv_ffmpegXYZ_64.dll。 – 2014-11-03 10:29:41

+2

使用OpenCV 2.4.10,将C:\ opencv \ sources \ 3rdparty \ ffmpeg添加到Windows路径,并将opencv_ffmpeg.dll和opencv_ffmpeg_64.dll重命名为opencv_ffmpeg2410.dll和opencv_ffmpeg2410_64.dll它的工作原理!谢谢:)我现在能够打开MJPEG视频文件 – Vincent 2015-02-18 07:59:51

27

复制opencv_ffmpeg.dll是不够的我 - 我不得不将它重命名为opencv_ffmpeg246.dll,当我用Python 2.7.5使用OpenCV 2.4.6时

+1

同样的,我和我的名字叫* opencv_ffmpeg310.dll * – 2016-04-05 02:46:22

+0

相同到2.4.10! Thx – Flayn 2016-06-06 11:51:27

8

我第一次尝试复制,然后更改窗口的路径环境..它没有工作,直到我改名为opencv_ffmpeg245.dll为我的openCV版本2.4.5和python 2.7。 (通知** 245.dll是OpenCV的版本2.4.5)

5

更新:这仍然是OpenCV的2.4.9真实,复制所有文件,并重新命名的DLL opencv_ffmpeg249.dll

+0

我不能让它在OpenCV 3.0.0-tp2 Windows中工作,对绝望的编码器有什么提示? :) – andli 2014-06-19 19:40:08

7

对于64位版本,请将opencv_ffmpeg_64.dll重命名为opencv_ffmpeg249_64.dll将249更改为您的opencv版本。

6

对于64位环境下的OpenCV 3.0.0,请复制opencv_ffmpeg_64.dll并将其重命名为opencv_ffmpeg300_64.dll。

还将此路径添加到您的PATH环境变量,以使其在Java下使用OpenCV。

+0

也适用于pyhon – Gulzar 2016-05-26 12:38:43

3

起初我用windows8.1 32bit和opencv 2.4.10。
我使用Logicool C270制作的文件test1.wmv遇到同样的问题。
我试图使用其他文件test2.mov这是由数码相机(佳能SX160)。 所以我可以玩test2.mov追加路径C:\opencv\build\x86\vc12\bin
但我不能播放test1.wmv.
所以我尝试通过使用VLC(至Video for youtube HD)将格式test1.wmv更改为test1a.mp4。
然后我可以玩test1a.mp4.
我在Ubuntu 14.04 LTS上试过test1.wmv,那我就可以玩了。
它可能会在Windows8.1和Ubuntu 14.04 LTS之间的默认ffmpeg二进制文件上出现一些差异。

4

我有与python 2.7和opencv 2.4.10相同的问题。我将opencv_ffmpeg2410_64.dll文件从C:\ Applications \ opencv \ build \ x64 \ vc10 \ bin复制到python路径中(我的位置是C:\ Users \ mohammad \ Anaconda),并解决了问题!

0

对于蟒蛇环境 副本opencv_ffmpeg249_64.dll从C:\ Python27 \ 根据您的OpenCV的正确版本 和过去它 ç重新命名它的版本:\用户\ KHALID \ Anaconda2 \图书馆\ BIN