import os import cv2 from tqdm import tqdm class ImageCreator: def __init__(self, filename, imgs_dir, image_start=0, image_end=0, pbar=True): """ :param str filename: The name of the video's filename. :param str imgs_dir: The directory where to store the image files. :param int image_start: The first image to be extracted. :param int image_end: The last image to be extracted, 0 if full video. :param bool pbar: Whether to display a progress bar. """ self.filename = filename self.imgs_dir = imgs_dir self.image_start = image_start self.image_end = image_end self.pbar = pbar if not os.path.exists(imgs_dir): os.makedirs(imgs_dir) def get_images(self): vid = cv2.VideoCapture(self.filename) total_frames = int(vid.get(cv2.CAP_PROP_FRAME_COUNT)) success, image = vid.read() count = 0 if self.image_end == 0: self.image_end = total_frames zfill_max = len(str(total_frames)) ok_count = 0 print("Writing images...") if self.pbar: pb = tqdm(total=total_frames) while success: if count >= self.image_start and count <= self.image_end: cv2.imwrite( f"{self.imgs_dir}/frame_{str(ok_count).zfill(zfill_max)}.png", image ) ok_count += 1 success, image = vid.read() if self.pbar: pb.update(1) count += 1 if self.pbar: pb.close() print("Wrote {} image files.".format(ok_count))