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视频操作基础---VideoCapture类

从 OpenCV 3 中的 VideoCapture 获取垫子

无法使用 VideoCapture 在 OpenCV+Python 中读取或播放视频

OpenCV3 VideoCapture buffer