python通过迭代器读取视频
class VideoIter(object):
def __init__(self, video_name):
self.cap = cv2.VideoCapture(video_name)
self.size = [int(self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT)),
int(self.cap.get(cv2.CAP_PROP_FRAME_WIDTH))]
self.fps = self.cap.get(cv2.CAP_PROP_FPS)
assert self.cap.isOpened(), FileNotFoundError
self.num_frame = self.cap.get(cv2.CAP_PROP_FRAME_COUNT)
self.index = -1
def __iter__(self):
return self
def __next__(self):
# while True:
if self.index < self.num_frame:
ret, frame = self.cap.read()
if ret:
self.index += 1
return frame
else:
raise ValueError
else:
raise StopIteration
调研过程
video_iter = VideoIter(os.path.join(video_path))
size = video_iter.size
num_frame = video_iter.num_frame
fps = video_iter.fps
start_frame, end_frame = 100, 200
while video_iter.index < end_frame and video_iter.index < num_frame:
frame = next(video_iter)
if start_frame <= video_iter.index < end_frame:
frame_data.append(frame)