【问题标题】:opencv videocapture and read doesnt retrieve all frames. Returns incorrect number of framesopencv videocapture 和 read 不会检索所有帧。返回不正确的帧数
【发布时间】:2021-12-07 10:59:13
【问题描述】:

我有一个 29 分钟长的 mp4 视频,分辨率为 1536x2304。我正在尝试做的是创建一个数据加载器,它摄取 mp4 文件并提供给 CNN,但为此我需要使用 opencv 来检索帧。当我使用 cap = cv.VideoCapture("mp4 file") 和 ret, frame = cap.read() 时,我只收到大约 40 帧。

由于视频长度为 29 分钟,并且为 18fps,因此我期望的帧数约为 31320 帧,但我只得到 40 帧。真的很困惑,感谢任何帮助!

【问题讨论】:

  • 您能出示您的计数代码吗?
  • 我观察到 mp4 文件的帧损坏,会提供空帧和错误的 returnCode,但您可以继续尝试读取帧,一段时间后您会得到新的帧。通常我最多允许 100 或 200 次试验。

标签: python opencv conv-neural-network opencv-python


【解决方案1】:

当您指定使用行 ret, frame = cap.read() 来计算帧数时,我假设您正在使用 while 循环,条件是何时到 break。

您是否认为while 循环可能由于与VideoCapture 对象中的帧数无关的问题而结束?或者,您可能已经多次调用 cap.read() 方法,每次递增到用于计算帧数的变量。

使用 OpenCV 获取视频中帧数的正确方法是:

import cv2 as cv

cap = cv.VideoCapture("file.mp4")
count = cap.get(cv2.CAP_PROP_FRAME_COUNT)

print(count)

(注意:如果您得到输出0,则可能找不到指定的文件名,需要更正。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 2021-11-29
    • 2015-09-23
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多