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

时间:2016-12-20 15:43:02

标签: python opencv video-processing

我正在尝试使用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()

任何提示?

2 个答案:

答案 0 :(得分:1)

你可以:

  1. 使用cap.get(cv2.CAP_PROP_POS_FRAMES)(另请参阅here)或
  2. 在每次迭代时递增一个变量:其当前值是当前帧号

答案 1 :(得分:0)

来自opencv-doc:

  

查询VideoCapture类使用的后端不支持的属性时,返回值0

可能不支持。在这种情况下,你必须自己计算帧数。