Python OpenCV 2.4视频捕获在Windows上不工作

Python OpenCV 2.4视频捕获在Windows上不工作,python,windows,opencv,Python,Windows,Opencv,我正在使用安装了以下内容的OpenCV 2.4的Python绑定 我的问题与类似,但我需要Windows机器解决方案 问题:当我尝试使用 cap = cv2.VideoCapture(0) print cap.grab() 它工作正常,但是下面的代码 cap = cv2.VideoCapture(filename) print cap.grab() 总是返回False 文件的路径正确、绝对且没有空格 我在两台装有Windows XP和Windows 7的机器上进行了试验,结果相似。在Linu

我正在使用安装了以下内容的OpenCV 2.4的Python绑定

我的问题与类似,但我需要Windows机器解决方案

问题:当我尝试使用

cap = cv2.VideoCapture(0)
print cap.grab()
它工作正常,但是下面的代码

cap = cv2.VideoCapture(filename)
print cap.grab()
总是返回False

文件的路径正确、绝对且没有空格


我在两台装有Windows XP和Windows 7的机器上进行了试验,结果相似。在Linux(Ubuntu)上,它对我来说很好。

C:\OpenCV\3rdparty\ffmpeg\
添加到Windows PATH环境变量,或者将
OpenCV\u ffmpeg.dll
从该目录复制到
C:\Python27\
或路径中的目录。或者,使用中的OpenCV二进制文件

可能还需要重命名
opencv\u ffmpeg.dll
文件

对于OpenCV版本X.Y.Z
opencv\u ffmpeg.dll
==>
opencv\u ffmpegXYZ.dll

对于64位OpenCV版本X.Y.Z

opencv\u ffmpeg.dll
=>
opencv\u ffmpegXYZ\u 64.dll
复制opencv\u ffmpeg.dll对我来说是不够的-当我将opencv\u ffmpeg246.dll与Python 2.7.5一起使用时,我不得不将其重命名为opencv\u ffmpeg246.dll,我首先尝试了复制,然后更改了windows的路径环境。。直到我将opencv版本2.4.5和python 2.7的名称更改为opencv_ffmpeg245.dll,它才起作用。(注意**245.dll来自opencv版本2.4.5)

更新:对于opencv 2.4.9,这仍然是正确的,复制所有文件,并重命名dll opencv_ffmpeg249.dll

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

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


还要将此路径添加到path环境变量中,以使其与Java下的OpenCV一起工作。

首先,我使用windows8.1 32位和OpenCV 2.4.10。
我在使用Logicool C270制作的文件
test1.wmv
时遇到了同样的问题。
我尝试使用数码相机(佳能SX160)制作的另一个文件
test2.mov
。 因此,我可以播放
test2.mov
来附加路径
C:\opencv\build\x86\vc12\bin

但是我不能玩
test1.wmv.

因此,我尝试使用VLC(到youtube HD的
视频
)将格式test1.wmv更改为test1a.mp4。
然后我可以玩
test1a.mp4.

我在Ubuntu14.04 LTS上尝试了
test1.wmv
,然后我就可以轻松玩了。

windows8.1和Ubuntu14.04 LTS之间的默认ffmpeg二进制文件可能会出现一些差异。

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

用于蟒蛇环境 从C:\Python27复制opencv\u ffmpeg249\u 64.dll\ 根据opencv的正确版本重命名其版本 过去的日子
C:\Users\KHALID\Anaconda2\Library\bin

您能发布文件名的值吗?尝试使用
filename=os.path.join(文件名)
。这里的更多信息:它是
“C:\\m.avi”
,但我只是尝试了
“C:\m.avi”
“C:/m.avi”
。它仍然不工作(有和没有
os.path.join
)。请检查opencv\u ffmpeg.dll是否与python使用的其他opencv dll位于同一目录中。另外,请尝试另一个avi文件。有时OpenCV无法解码其他程序(例如Windows Media Player)正确播放的文件。我在我的计算机上找不到任何名为“OpenCV”的文件(当然,OpenCV文件夹及其内容除外)。因此,我只是尝试将
opencv\u ffmpeg.dll
复制到
C:\Python27\Lib\site包`(如
cv2.pyd`),但它不起作用。对这个问题的回答:似乎也很相关,也很有帮助。谢谢!它可以工作,但只有从
C:\OpenCV\3rdparty\ffmpeg`,而不仅仅是从
OpenCV\u ffmpeg.dll`,复制所有文件时,才能工作。请参阅下面的所有答案。对于opencv版本X.YZ,似乎需要将
opencv\u ffmpeg.dll
文件重命名为
opencv\u ffmpegXYZ.dll
,如果使用64位版本,则需要将其重命名为
opencv\u ffmpegXYZ\u 64.dll,将C:\opencv\sources\3rdparty\ffmpeg添加到Windows路径,并将opencv_ffmpeg.dll和opencv_ffmpeg_64.dll重命名为opencv_ffmpeg2410.dll和opencv_ffmpeg2410_64.dll,这一切正常!谢谢:)我现在可以打开MJPEG视频文件了谢谢-这很有效!令人沮丧的是,在没有复制DLL的情况下,这种“无声地失败”。我宁愿不要一个微妙的错误,一个很好的大异常“error,Danger Will Robinson,missing dll”,然后死去。它更干净,也很简单。谢谢你的帮助。我无法让它在OpenCV 3.0.0-tp2 Windows上运行,对绝望的程序员有什么提示吗?:)同样,我把我的名字命名为opencv_ffmpeg310.dllsame,改为2.4.10!THX也适用于pyhon