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

时间:2016-02-06 15:27:04

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

import cv2
import numpy as np

cap = cv2.VideoCapture('traffic.avi')

retval, frame = cap.read()

print retval

================ RESTART: J:\Python For DIP\traffic_video.py ================
False
>>> 

retval的值始终为False,这意味着该命令不会读取视频。读取帧必须为True。我不知道该怎么办。但是,当我使用我的默认网络摄像头时,它变为True。我尝试了很多视频,出现了同样的问题。注意:我已正确安装了ffmpeg。

注意:这不是完整代码,在此步骤中我只验证cap.read()是True还是False

2 个答案:

答案 0 :(得分:13)

此方法保证100%

首先检查你的OpenCV版本,例如2.4.11。您可以通过在Python Shell中键入以下命令来检查它:

>>> from cv2 import __version__
>>> __version__
'2.4.11'
>>> 

然后转到C:\opencv\build\x86\vc12\bin并复制opencv_ffmpeg2411.dll。 最后转到Python ex:C:\Python27的根目录并在其中粘贴opencv_ffmpeg2411.dll

  

检查opencv_ffmpeg2411.dll文件的名称,是否为该版本   如果不执行以下操作,是否写入了opencv   opencv_ffmpeg(你的opencv版本没有点).dll

之后创建一个新的Python文件并复制此代码并将其粘贴到自己的视频中

import numpy as np
import cv2

# Capture video from file
cap = cv2.VideoCapture('your video')

while True:

    ret, frame = cap.read()

    if ret == True:

        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        cv2.imshow('frame',gray)


        if cv2.waitKey(30) & 0xFF == ord('q'):
            break

    else:
        break

cap.release()
cv2.destroyAllWindows()

你将有一个输出视频,例如: Result

答案 1 :(得分:1)

查找Python的根目录可能有点棘手。我正在使用 Enthought 发行版,并且首先将opencv_ffmpeg文件粘贴到错误的Python目录中。

WRONG:

C:\Users\USERNAME\AppData\Local\Programs\Python\Python35-32

RIGHT:

C:\Users\USERNAME\AppData\Local\Enthought\Canopy\User

简而言之,请确保找到合适的Python目录。