【问题标题】:OpenCV 2.4.9 VideoCapture() won't Read Video File in Enthought Python 2.7 EnvironmentOpenCV 2.4.9 VideoCapture() 不会在 Enthought Python 2.7 环境中读取视频文件
【发布时间】:2018-04-23 12:03:36
【问题描述】:

我在让 OpenCV 2.4.9 使用 python 读取(和显示)视频文件时遇到问题。我知道查找文件不是问题,因为我能够让cv2.imread() 从同一目录中读取图像。这绝对是cv2.VideoCapture() 的问题。这是我得到的代码和输出:

import cv2
import numpy as np

    testvid = cv2.VideoCapture('testvid.avi')

while(1):
    ret, frame = testvid.read()
    print ret

    cv2.imshow('frame',frame)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

testvid.release()
cv2.destroyAllWindows()

输出:

False

error: C:\pisi\tmp\opencv-2.4.9-5\work\opencv-2.4.9\modules\highgui\src\window.cpp:261: error: (-215) size.width>0 && size.height>0 in function cv::imshow 
OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow, file C:\pisi\tmp\opencv-2.4.9-5\work\opencv-2.4.9\modules\highgui\src\window.cpp, line 261

我知道有几个人遇到过同样的问题。 This threadthis tread 都通过说您必须重命名 opencv_ffmpeg.dll 文件以适合您的版本并将其复制到路径中的主 python 目录或目录(或类似的东西)来解决这个问题。

但是,我通过 Enthought 使用 Python 2.7.13(由我的教授推荐),库和包的设置路径和方式似乎与其他线程中的完全不同。 Enthought 使用了一个包管理器,它会自动为我下载和设置 OpenCV。没有 Python 目录。一切都是通过Enthought。经过一番挖掘,我找到了所有 OpenCV .dll 所在的位置,包括 opencv_ffmpeg249_64.dll:

C:\Users\USERNAME\AppData\Local\Enthought\Canopy\edm\pkgs\03\9d58e152b8f411718220c30639b8448585cb7d9a82de662c7e34b35d9ec1f6

那我该怎么办呢?我在哪里复制 .dll? .dll 甚至是这里的问题吗?我已经尝试了很多东西,包括将它复制到各种地方并重命名.dll,但没有任何效果。救命!

【问题讨论】:

    标签: python python-2.7 opencv video-capture enthought


    【解决方案1】:

    问题(至少据我所知,没有您的测试文件)是您的代码在testvid.read() 之后无法检查ret 的值。当此调用返回False 时,将没有更多的帧可显示,因此imshow() 将失败。

    【讨论】:

    【解决方案2】:

    为了解决您的问题,我建议您从头开始并执行以下步骤:

    1 - 在您的机器上安装新的标准版本的 Python 3

    2 - 从https://bootstrap.pypa.io/get-pip.py

    下载 get-pip.py 文件

    3 - 打开终端并 cd 到您下载 get-pip.py 文件的文件夹

    4 - 然后在终端输入python3 get-pip.py 以安装pip

    5 - 一旦安装了 pip,您就可以通过在终端上输入 pip install cmake 来安装 cmake

    6 - 现在转到 https://github.com/opencv/opencv 并下载 opencv 的整个存储库

    7 - 在您的终端上 cd 到您下载 opencv 存储库的文件夹并使用 cmake 输入编译它

    mkdir release
    
    cd release
    
    cmake -D CMAKE_BULD_TYPE=RELEASE -D BUILD_PYTHON_SUPPORT=ON USE_V4L=ON WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON USE_GStreamer=ON ..
    
    make
    
    make install
    

    8 - 现在 cd 到 yourscript.py 所在的目录,你应该能够执行你的脚本,在你的终端上输入没有问题python3 yourscript.py

    如果这能解决问题,请告诉我

    希望对你有帮助

    【讨论】:

    • 感谢您的建议。我下载了 Python 3 并让 pip 正常工作,但是,我无法让 cmake 正常工作。我尝试了另一种安装opencv的方法,方法是让pip为opencv下载一个.whl文件。但是现在当我运行程序时,我得到了这个:ImportError: DLL load failed: %1 is not a valid win32 application
    • 我还应该澄清一下,我使用的是 Windows 10。
    • 不要尝试通过 pip 安装 opencv 的 .whl 文件来安装它:它不会工作。您能否详细说明您在使用 cmake 时遇到的问题?
    【解决方案3】:

    不要在那个目录中做任何事情——这是一个包管理器私有缓存目录,如果你把它弄乱了,谁知道你会破坏什么。您的 Canopy python 环境位于 Canopy\edm\envs\User 中。

    无需进一步调查,我不知道您的脚本是否应该在 Python 2.7 中运行,但如果您想按照第一个答案的建议在 Python 3 中尝试,您可以在 Canopy 安装中轻松安装 Python 3.5 环境,如下这些说明:http://docs.enthought.com/canopy/configure/python-environments.html

    【讨论】:

    • 我在 Enthought Canopy 中使用 Python 3.5 进行了尝试,它给了我类似的错误。这次 Canopy 安装了 opencv 3.2.0。
    猜你喜欢
    • 2014-04-30
    • 2013-01-22
    • 2018-03-09
    • 2013-04-28
    • 1970-01-01
    • 2014-08-19
    • 2018-07-26
    • 2016-05-16
    • 2020-12-19
    相关资源
    最近更新 更多