2016-12-20 143 views
0

我试图在使用OpenCV的视频中检测(摄影)Flash。在opencv中获取CV_CAP_PROP_POS_FRAMES的视频帧

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

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

任何提示?

回答

0

从OpenCV的-DOC:

当查询未由VideoCapture类使用的后端支持的属性,则返回0

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

+0

非常感谢你很多,我按照你的建议添加了一个变量。 – user6721454

0

您可以:

  1. 使用cap.get(cv2.CAP_PROP_POS_FRAMES)(见here,亦可),或
  2. 增量的变量在每次迭代:它的当前值是当前帧编号