Python OpenCV-contrib v3.4.3 VideoCapture.read()返回false

时间:2018-09-26 11:28:46

标签: python opencv

类似于OpenCV 2.4 VideoCapture not working on Windows

结果是一个带有灰色图像的窗口约2秒钟,然后关闭并显示“视频结尾

import cv2
import imutils

vidPath = "filename.mp4"
video = cv2.VideoCapture(vidPath)
index = 0;

while True:

    print (index)
    index += 1
    ret, frame = video.read()

    if ret == False:
         print("End of video")
         break

    frame = imutils.resize(frame, width = 500)

    cv2.imshow("Video", frame)

video.release()
cv2.destroyAllWindows()

'ret'总是在索引打印达到大约900后返回false,根本没有任何有用的显示在窗口上。该视频大约长2分钟。

Windows 10,Python 3.5版,OpenCV 3.4.3版(contrib)通过安装

pip install opencv-contrib-python

我检查了cv2.getBuildInformation(),FFMpeg是(预编译的二进制文件) 我已将opencv_ffmpeg313.dll复制到python (user/AppData/Local/Programs/Python/Python35-32/Scripts) and (user/AppData/Local/Programs/Python/Python35-32)的路径中 我还制作了名为opencv_ffmpeg313_64.dll的副本,以防万一

我还尝试了几种不同的视频,包括多个.mp4,.avi等。 我已经用尽了解决此问题的所有修补程序,但仍然可以解决该问题。

1 个答案:

答案 0 :(得分:0)

对不起,我没有注意到您问题的所有详细信息...

问题是您在使用imshow函数之后失踪了:

cv2.waitKey(10)

其中10是等待的毫秒数。 waitKey函数不仅检查键盘事件并返回按下的键,还刷新您在其中显示图像的窗口(如果有多个,则刷新所有窗口)。它类似于某些GUI库中的spin函数...

这说明了为什么窗口是灰色的。在某个时候,它将结束读取视频并退出(900帧以后)。 30 fps视频中的900帧仅需30秒...如果持续2分钟左右,则可能是7.5 fps ...否则帧可能有问题。要对此进行检查,您可以检查FPS property and the frame count property。与此:

fps = video.get(cv2.CAP_PROP_FPS)
amountOfFrames = video.get(cv2.CAP_PROP_FRAME_COUNT )

您甚至可以执行更“精美”的播放,将fps用作fps,并将其用作参数,如下所示:

cv2.waitKey(int(1000./float(fps))) # 1000 milliseconds / fps