【问题标题】:OpenCV reading MP4 gives all zero framesOpenCV 读取 MP4 给出所有零帧
【发布时间】:2021-08-23 13:43:13
【问题描述】:

我一直在尝试使用 python-opencv 逐帧读取这个 mp4 文件。以下是我的代码。

import cv2
filename = '<absolute path>/HandWash_014_A_11_G_03.mp4'

cap = cv2.VideoCapture(filename)

while(cap.isOpened()):
    ret, frame = cap.read()
    print(frame, ret)
    if ret:
        cv2.imshow("frame", frame)
        cv2.waitKey(1)
    else:
        break

cap.release()
cv2.destroyAllWindows()

当我在阅读后立即打印帧时,我得到所有零数组,如下所示。然后我尝试在同一文件夹中读取不同的 mp4 文件,但成功返回非零值。另外,请注意,这个有问题的文件可以使用媒体播放器成功播放(我尝试过 Quicktime 播放器)。

    [[[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 ...

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  ...
  [0 0 0]
  [0 0 0]
  [0 0 0]]]

我实际上是在尝试逐帧从这个 Kaggle 数据集中读取文件 https://www.kaggle.com/realtimear/hand-wash-dataset

请帮助我理解这里的问题。非常感谢任何帮助。

【问题讨论】:

    标签: python opencv mp4


    【解决方案1】:

    有时视频文件已损坏或与 opencv 不兼容。视频播放器可以读取它,因为它旨在尝试补偿那些有问题的文件。最好的方法是使用手刹或类似方法重新编码视频。通常可以为我解决问题

    【讨论】:

    • 谢谢,这听起来是解决方案。
    猜你喜欢
    • 2016-11-06
    • 2015-12-05
    • 2021-04-25
    • 2019-04-25
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 2014-09-03
    相关资源
    最近更新 更多