【问题标题】:OpenCV Python unable to open videofileOpenCV Python无法打开视频文件
【发布时间】:2025-12-05 06:45:02
【问题描述】:

我使用的是 Windows 10 和 2.7.12 32 位版本的 Python 和 Opencv 3.1.0。以下是出错的代码:

vcap = cv2.VideoCapture("StraightAhead.avi")
if not vcap.isOpened():
    print "File Cannot be Opened"

首先,所有这些代码在使用网络摄像头时都有效(所以VideoCapture(0))。

我已经尝试了几件事。首先,它最初是一个 mp4,所以我将它转换为 avi。我尝试了一个使用 Linux 与 python 和 opencv 的朋友提供的文件 (.webm),该文件对他有用,但对我无效。

我检查是否可以将 DLL 文件从 opencv ffmpeg 移动到 Python,但那里没有适合我的 DLL 文件。我检查了很多其他问题,但大多数都提供了 Linux 的解决方案。

最相关的问题没有任何答案或cmets,所以我最终决定在这里问它。我希望有人可以提供帮助。

【问题讨论】:

    标签: python windows opencv


    【解决方案1】:

    试过你的代码,它可以在我的 64 位 Win10 机器上运行。 32 位 Windows 所需的文件是“opencv_ffmpeg310.dll”。建议您从OpenCV Download site 下载二进制文件,安装并重试。 ffmpeg DLL 位于“C:\Program Files (x86)\OpenCV 3.1.0\x64\vc14\bin”。如果安装程序没有将它们添加到windows环境中,还需要添加下面的路径。

    OPENCV_DIR='C:\Program Files (x86)\OpenCV 3.1.0\x64\vc14' 
    PATH = %PATH%;%OPENCV_DIR%\bin
    

    注意vc14是Visual Studio 2015编译的,vc12是VS2013编译的。

    希望对您有所帮助。

    【讨论】:

    • 所以是的,我做了所有这些,当我重新安装它时说“输出文件 opencv_ffmpeg.dll 未放置”或类似的东西,我尝试再次重新安装以重新创建它,但它立即关闭了安装屏幕完成后。我以管理员身份打开。而且,如果路径设置不正确,那么它如何与 cam 一起使用呢?问题仍然存在,我的 x64 文件夹不是立即在顶部文件夹中,而是在 build.xml 中。另外,当我检查 ffmpeg 文件夹时,那里没有 DLL
    • 我重新安装,再次添加路径并将 ffmpeg DLL 移动到 Python DLL 文件夹。仍然无法正常工作我还下载了 Visual Studio 15,但它之前与网络摄像头一起使用了很多 opencv 的东西,所以我确信 opencv 可以工作(我有一个与网络摄像头一起工作的球跟踪器)
    • @Marciano 首先建议你看看Help Center,以便读者理解你的问题。
    • 您的 cmets 似乎导致了更多的混乱。您是否在 32 位 Windows 中使用 32 位 OpenCV?您是自己构建和编译 OpenCV 3.1,还是只下载二进制文件并将文件安装或复制到目录中? ffmpeg 用于视频编码或解码。它不直接处理来自网络摄像头的视频流播放。网络摄像头可以与没有 opencv_ffmpeg.dll(32 位)或 opencv_ffmpeg_x64.dll(64 位)的 OpenCV 视频 I/O 模块一起使用。
    • 我为这个不连贯的问题道歉,我试图提出这个问题,同时表明我确实试图找到问题的答案,而不是给人一种懒惰的印象。对于我正在处理的特定项目,我需要 32 位兼容性,所以我在所有来源上都选择了 32 位。是的,我使用 OpenCV 的自解压下载。您对网络摄像头工作的评论是有道理的。我认为现在归结为在尝试运行视频文件而不是网络摄像头时我错过了哪一步。
    【解决方案2】:

    您可以将二进制文件解压到 C:\ 并重试。

    1. 设置 OPENCV_DIR = C:\opencv\build\x64\vc14 { opencv_ffmpeg310_64.dll 在那里 }
    2. 使用 %OPENCV_DIR%\bin 添加 PATH
    3. 复制 C:\opencv\build\python\2.7\x86\cv2.pyd 到 %PYTHON%\lib\site-packages\cv2.pyd { 其中 %PYTHON% 是 32 位 python根目录,例如"C:\Program 文件 (x86)\Python27" }

    如果还是不行,请故意更改 OpenCV 路径以使用 32 位版本的 ffmpeg DLL。

    1. 将 OPENCV_DIR 设置为 C:\opencv\build\ { 以在 bin\ 下使用 32 位 ffmpeg }

    如果问题仍然存在,记录 Traceback 消息。

    编辑:刚刚测试了从opencv网站下载的opencv-3.1.0.exe。视频文件播放,使用'Wildlife.wmv' 自带32位Win7,可以。

    看起来 EXE 压缩了两组文件... OPENCV_DIR 设置为 C:\opencv\opencv\build\x86\vc12。并将 c:\opencv\opencv\build\python\2.7\x86\cv2.pyd cv2.pyd 复制到 python 的 lib\site-packages。就是这样。

    【讨论】:

    • OpenCV 3.1 和 Python 的路径设置是什么?
    • 好的,首先感谢您抽出宝贵时间帮助我。我将在这里列出我拥有并尝试过的路径。对于 Python:C:\Python27 和 C:\Python27\Scripts。这些是我尝试使用 opencv C:\Program Files (x86)\opencv\build\x64\vc14\bin 的路径不起作用并将其更改为 -> C:\Program Files (x86)\opencv\构建\x64\vc14\bin\opencv_ffmpeg310_64.dll。仍然没有工作,并且 Trace back 消息是它打印文件无法打开,显示发生错误的模块和行号,然后是:AttributeError:'NoneType' object has no attribute 'shape'
    • 您的情况的环境变量 OPENCV_DIR 应该只是“C:\Program Files (x86)\opencv\build\x64\vc14\”。 PATH 应包括 %OPENCV_DIR%\bin。您的情况,它可能会搜索 bin\opencv_ffmpeg310_64.dll\ 下的文件。看起来 AttributeError 是由于解码失败,无法检测到输入视频文件类型。
    • 如果我理解正确,我应该将我的 opencv 路径变量设置为: C:\Program Files (x86)\opencv\build\x64\vc14\bin ,我现在已经完成了。那么我的ffmpeg安装可能有问题吗?清楚地看到 opencv 有效吗?
    • 你可以试试我的。当我构建 OpenCV 时,它来自 OpenCV 社区。无论是二进制文件还是我自己的构建,它都能很好地工作。