get()的作用是什么,如何调整帧速率?

时间:2018-10-15 19:22:11

标签: python opencv

在以下代码中,我将视频分成帧。我每秒得到一幅图像,但我不明白它的确切工作方式以及while循环中发生的事情以及get()的功能是什么。如果有人可以解释,我将不胜感激

<code>
import cv2
import math

videoFile = "test3.avi"
imagesFolder = "D:\Video Frames"
cap = cv2.VideoCapture(videoFile)
frameRate = cap.get(5) #frame rate
while(cap.isOpened()):
    frameId = cap.get(1) #current frame number
    ret, frame = cap.read()
    if (ret != True):
        break
    if (frameId % math.floor(frameRate) == 0):
        filename = imagesFolder + "/image_" +  str(int(frameId)) + ".jpg"
        cv2.imwrite(filename, frame)
cap.release()
print ("Done!")
<\code>

1 个答案:

答案 0 :(得分:0)

get是VideoCapture类可用的方法。在OpenCV documentation中,您可以检查参数。每个MACRO都是具有相应整数值的视频属性。例如,

cap.get(0)表示CAP_PROP_POS_MSEC,依次提供视频文件的当前位置(以毫秒为单位)或视频捕获时间戳。

cap.get(1)表示CAP_PROP_POS_FRAMES-接下来要解码/捕获的帧的基于0的索引。

同样,cap.get(5)表示CAP_PROP_FPS-视频的帧频。

但是,我认为编写这样的代码是一种不好的做法,应该使用

cv2.CAP_PROP_FPS而不是cap.get(5)等。