OpenCV 2.4.9 VideoCapture()在Enthought Python 2.7环境中不会读取视频文件

时间:2017-11-10 09:40:26

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

我在使用python获取OpenCV 2.4.9读取(和显示)视频文件时遇到了问题。我知道查找文件不是问题,因为我能够让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,但没有任何效果。救命啊!

3 个答案:

答案 0 :(得分:1)

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

1 - 在您的计算机上安装新标准版 Python 3

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

下载 get-pip.py 文件

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

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

5 - 安装该点后,您可以在终端上输入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

来执行您的脚本

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

希望这有帮助

答案 1 :(得分:1)

问题(至少据我所知,没有你的测试文件)是你的代码在ret之后无法检查testvid.read()的值。当此调用返回False时,则不再显示任何帧,因此毫不奇怪,imshow()将失败。

答案 2 :(得分:0)

不要在该目录中执行任何操作 - 这是一个包管理器私有缓存目录,如果你搞乱它,谁知道你会破坏什么。您的Canopy python环境位于Canopy \ edm \ envs \ User中。

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