OpenCV 2.4 VideoCapture 在 Windows 上不起作用
Posted
技术标签:
【中文标题】OpenCV 2.4 VideoCapture 在 Windows 上不起作用【英文标题】:OpenCV 2.4 VideoCapture not working on Windows 【发布时间】:2012-07-26 19:27:08 【问题描述】:我正在使用 Python 绑定到安装了以下 instructions 的 OpenCV 2.4。
我的问题类似于this one,但是我需要Windows机器解决方案。
问题:当我尝试使用时
cap = cv2.VideoCapture(0)
print cap.grab()
它工作正常,但是下面的代码
cap = cv2.VideoCapture(filename)
print cap.grab()
总是返回 False。
文件路径正确、绝对且没有空格。
我在两台装有 Windows XP 和 Windows 7 的机器上进行了尝试,结果相似。在 Linux (Ubuntu) 上它对我来说很好。
【问题讨论】:
你能发布文件名的值吗?尝试使用filename = os.path.join( filename )
。更多信息在这里:***.com/questions/1633643/…
它是"C:\\m.avi"
,但我刚刚尝试了"C:\m.avi"
和"C:/m.avi"
。它仍然无法正常工作(有和没有os.path.join
)。
检查 opencv_ffmpeg.dll 是否与 python 使用的其他 OpenCV dll 位于同一目录中。另外,尝试另一个 avi 文件。有时 OpenCV 无法解码其他程序(例如 Windows Media Player)正确播放的文件
我没有在我的计算机上找到任何名称中带有“opencv”的文件(opencv 文件夹及其内容除外)。所以我只是尝试将opencv_ffmpeg.dll
复制到C:\Python27\Lib\site-packages` (like
cv2.pyd`)但它不起作用。
这个问题的答案:***.com/questions/12279833/… 似乎也很相关并且很有帮助。
【参考方案1】:
将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 版本 X.Y.Zopencv_ffmpeg.dll
==> opencv_ffmpegXYZ.dll
对于 64 位 OpenCV 版本 X.Y.Zopencv_ffmpeg.dll
==> opencv_ffmpegXYZ_64.dll
【讨论】:
谢谢!它有效,但前提是您从C:\OpenCV\3rdparty\ffmpeg`, not just
opencv_ffmpeg.dll 复制 all 文件。
查看下面的所有答案。对于 OpenCV 版本 X.YZ,似乎需要将 opencv_ffmpeg.dll
文件重命名为 opencv_ffmpegXYZ.dll
,如果使用 64 位版本,则需要重命名为 opencv_ffmpegXYZ_64.dll
。
使用 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 视频文件
谢谢 - 这行得通!令人沮丧的是,如果没有复制该 DLL,这个“静默失败”。我宁愿不是一个微妙的错误,一个很好的大异常“错误,Danger Will Robinson,缺少 dll <...>”然后死。
我会推荐第二个选项(使用来自lfd.uci.edu/~gohlke/pythonlibs/#opencv 的 OpenCV 二进制文件)。它更干净,也很简单。感谢您的帮助。【参考方案2】:
复制 opencv_ffmpeg.dll 对我来说还不够 - 当我在 Python 2.7.5 中使用 OpenCV 2.4.6 时,我不得不将其重命名为 opencv_ffmpeg246.dll
【讨论】:
同样,我命名为 opencv_ffmpeg310.dll 与 2.4.10 相同!谢谢【参考方案3】:我首先尝试复制,然后更改 Windows 的 Path 环境。直到我将我的 openCV 版本 2.4.5 和 python 2.7 的名称更改为 opencv_ffmpeg245.dll,它才起作用。 (注意**245.dll来自opencv 2.4.5版)
【讨论】:
【参考方案4】:对于 64 位版本,将 opencv_ffmpeg_64.dll 重命名为 opencv_ffmpeg249_64.dll 将 249 更改为您的 opencv 版本。
【讨论】:
【参考方案5】:对于 64 位环境上的 OpenCV 3.0.0,复制 opencv_ffmpeg_64.dll 并将其重命名为 opencv_ffmpeg300_64.dll。
还要将此路径添加到您的 PATH 环境变量中,以使其在 Java 下与 OpenCV 一起使用。
【讨论】:
也适用于 pyhon【参考方案6】:更新:对于 OpenCV 2.4.9 仍然如此,复制所有文件,并将 dll 重命名为 opencv_ffmpeg249.dll
【讨论】:
我无法让它在 OpenCV 3.0.0-tp2 Windows 上工作,对于绝望的编码员有什么提示吗? :)【参考方案7】:我在 python 2.7 和 opencv 2.4.10 上遇到了同样的问题。我将 opencv_ffmpeg2410_64.dll 文件从 C:\Applications\opencv\build\x64\vc10\bin 复制到 python 路径中(我的是在 C:\Users\mohammad\Anaconda),它已经解决了!
【讨论】:
【参考方案8】:一开始我使用的是 windows8.1 32bit 和 opencv 2.4.10。
我在使用由 Logicool C270 制作的文件 test1.wmv
时遇到了同样的问题。
我尝试使用由数码相机(佳能 SX160)制作的其他文件test2.mov
。
所以我可以玩test2.mov
来追加路径C:\opencv\build\x86\vc12\bin
。
但我不能玩test1.wmv.
所以我尝试使用 VLC 将格式 test1.wmv 更改为 test1a.mp4(到 Video for youtube HD
)。
那我可以玩test1a.mp4.
我在 Ubuntu 14.04 LTS 上尝试了test1.wmv
,然后我就可以轻松玩了。
windows8.1 和 Ubuntu 14.04 LTS 之间的默认 ffmpeg 二进制文件可能会出现一些差异。
【讨论】:
【参考方案9】:对于 anaconda 环境 从 C:\Python27\ 复制 opencv_ffmpeg249_64.dll 根据您的 opencv 正确版本重命名其版本 并通过它到 C:\Users\KHALID\Anaconda2\Library\bin
【讨论】:
以上是关于OpenCV 2.4 VideoCapture 在 Windows 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在 Android 上的 OpenCV 中旋转 VideoCapture
VideoCapture 在 OpenCV 2.4.2 中不起作用
从 OpenCV 3 中的 VideoCapture 获取垫子