在以下代码中,我将视频分成帧。我每秒得到一幅图像,但我不明白它的确切工作方式以及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>
答案 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)等。