在 opencv python 中使用 CV_CAP_PROP_POS_FRAMES 从视频中获取帧

get frame from video with CV_CAP_PROP_POS_FRAMES in opencv python

我正在尝试使用 OpenCV 检测视频中的(摄影)闪光灯。

我检测到闪光发生的帧(平均亮度高于阈值),现在我想获得 帧编号

我尝试使用 CV_CAP_PROP_POS_FRAMES from the OpenCV docs 但没有成功。

import numpy as np 
import cv2

cap = cv2.VideoCapture('file.MOV')

while(cap.isOpened()):
    ret, frame = cap.read()

    BW = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    h,s,v = cv2.split(hsv)
    average = np.average(v) #computes the average brightness

    if average > 200: #flash is detected
        cv2.imshow('frame',BW)
        frameid = cap.get(CV_CAP_PROP_POS_FRAMES) # <--- this line does not work 
        print(frameid)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

有什么建议吗?

来自 opencv-doc:

When querying a property that is not supported by the backend used by the VideoCapture class, value 0 is returned

可能不支持。那你就得自己数帧数了。

您可以:

  1. 使用 cap.get(cv2.CAP_PROP_POS_FRAMES)(另见 )或
  2. 在每次迭代时增加一个变量:它的当前值是当前帧数