def extract_video_frames(queue: PriorityQueue,
source: int,
cap: cv2.VideoCapture,
crop: Tuple[int, int, int, int],
target_width: int,
target_height: int,
frame_step: int=1,
display_progress: bool=False):
window = 'video'
if display_progress:
cv2.namedWindow(window)
while True:
success, buffer = cap.read()
if not success:
break
# crop borders
buffer = buffer[crop[0]:-crop[2], crop[1]:-crop[3], :]
buffer = cv2.resize(buffer, (target_width, target_height), interpolation=cv2.INTER_AREA)
frame = cap.get(cv2.CAP_PROP_POS_FRAMES)
random_priority = random()
queue.put((random_priority, (buffer, source)))
if display_progress:
cv2.imshow(window, buffer)
if (cv2.waitKey(33) & 0xff) == 27:
break
cap.set(cv2.CAP_PROP_POS_FRAMES, frame + frame_step)
if display_progress:
cv2.destroyWindow(window)
评论列表
文章目录