下面的代码存储视频中的所有帧,然后选择并存储感兴趣的帧,在本例中为每90帧一帧
import cv2
import numpy as np
import matplotlib.pyplot as plt
vidcap = cv2.VideoCapture("video .wmv")
success,image = vidcap.read()
count = 0
success = True
frames = []
while success:
frames.append(image)
success,image = vidcap.read()
count += 1
vidcap.release()
#print(len(frames))
interval = 90
selectframes = []
framenum = [] #frame number of the selected frame
for i in range(0,len(frames),interval):
selectframes.append(frames[i])
framenum.append(i)
虽然代码按预期工作,但我只是想知道是否有更好的方法
至少,你可以做
if count % 90 == 0: frames.append(image)
有优化的潜力。OpenCV的VideoCapture不仅有一个
read()
方法,还有一对grab()
和retrieve()
方法,这正是read()所做的。grab()只确保获取了帧,retrieve()实际对其进行解码。这可能对视频文件起作用,也可能不起作用(取决于后端/API首选项实现它的效果)。在不使用retrieve()的情况下调用grab()可以节省程序实际解码每个帧的工作量假设grab()比read()做的工作更少,您可以尝试vidcap.grab()90次,一次尝试vidcap.retrieve(),然后重复
你可以试试这个
相关问题 更多 >
编程相关推荐