在下面的代码中,我将视频分成几帧。我每秒得到一张图像,但我不明白它是如何工作的,循环时发生了什么以及get((的功能是什么。如果有人能解释一下,我将不胜感激。
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!")
get 是 VideoCapture 类可用的方法。从 OpenCV 文档中,您可以检查参数。每个宏都是具有相应整数值的视频属性。例如
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( 等等。