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

标签 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 是 YES(预构建的二进制文件) 我已将 opencv_ffmpeg313.dll 复制到 python (user/AppData/Local/Programs/Python/Python35-32/Scripts) 和 (user/AppData/Local/Programs/Python/Python35-32) 的路径> 为了以防万一,我还制作了名为 opencv_ffmpeg313_64.dll 的副本

我还尝试了几个不同的视频,多个 .mp4、.avi 等。 我已经用尽了我为这个问题找到的所有修复方法,但仍然能解决问题。

最佳答案

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

问题是你在 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

关于Python OpenCV-contrib v3.4.3 VideoCapture.read() 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52516689/

相关文章:

python - 位置权限弹出窗口

python - 获取之前生成的ID

python - 如何从 Keras 中的 ImageDataGenerator 格式化 X 和 Y 数据?

android - 检测眼球

python-3.x - 如何在keras预处理器中传递数组而不是路径

opencv - OpenCV const矩阵-不总是const吗?

python - 如何在 Python 中创建用户定义的列表?

python - turicreate.text_analytics.count_words 的用法

python - CV2 : Is there a function that outputs the number of white dots in a polygon?

opencv - 查找图像中边缘的密度