【问题标题】:Python OpenCV-contrib v3.4.3 VideoCapture.read() returns falsePython OpenCV-contrib v3.4.3 VideoCapture.read() 返回 false
【发布时间】:2019-03-02 04:05:22
【问题描述】:

类似于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 是 YES(预编译的二进制文件) 我已将 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 等。 我已经用尽了我为这个问题找到的所有修复方法,但仍然想出来。

【问题讨论】:

  • 会不会是文件路径?尝试使用绝对文件路径(不要忘记转义反斜杠),例如 C:\\test\\filename.mp4 。还可以尝试检查 video.isOpened() 以查看它是否真的能够打开文件(并且能够播放)
  • 我已经改成绝对文件路径,video.isOpened()返回True, no dice
  • 很遗憾,我没有网络摄像头。我假设索引打印出来意味着它在打印“视频结束”之前读取了大约 900 帧,但它只是在窗口上显示为灰色虚无。另外,我收到了错误AttributeError: module 'cv2.cv2' has no attribute 'CV_CAP_PROP_FRAME_COUNT'
  • 是的,我删除了评论,因为我错过了您问题中的一些细节,请稍等,我正在写答案
  • 啊,看来我错过了重要的一步。我需要使用 cv2.waitkey(30) 来减慢播放速度,使其真正可见

标签: python opencv


【解决方案1】:

抱歉,我没有注意到您问题的所有细节......

问题是你在imshow函数之后缺少:

cv2.waitKey(10)

其中 10 是等待的毫秒数。 waitKey 函数不仅检查键盘事件并返回按下的键,还刷新您执行 imshow 的窗口(如果您有多个窗口,则刷新所有窗口)。类似于一些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 并将其用作 waitKey 函数中的参数,如下所示:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-06
    • 2020-05-27
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 2018-04-10
    相关资源
    最近更新 更多