Python-OpenCVで動画をフレーム分割して画像として保存
動画をフレームに分割して画像として指定したディレクトリーに保存する操作をまとめた。 動画を読み込んで、フレームごとに存在を確認して、確認できれば画像として保存する、という手順。 引数は適宜変えてください。
import os import shutil import cv2 def video_2_frames(video_file='./IMG_2140.MOV', image_dir='./image_dir/', image_file='img_%s.png'): # Delete the entire directory tree if it exists. if os.path.exists(image_dir): shutil.rmtree(image_dir) # Make the directory if it doesn't exist. if not os.path.exists(image_dir): os.makedirs(image_dir) # Video to frames i = 0 cap = cv2.VideoCapture(video_file) while(cap.isOpened()): flag, frame = cap.read() # Capture frame-by-frame if flag == False: # Is a frame left? break cv2.imwrite(image_dir+image_file % str(i).zfill(6), frame) # Save a frame print('Save', image_dir+image_file % str(i).zfill(6)) i += 1 cap.release() # When everything done, release the capture
githubに置いたコードを 以下のように実行すると、指定したディレクトリーに動画をフレーム分割した画像が保存される。
>>> import test >>> test.video_2_frames() Save ./image_dir/img_000000.png Save ./image_dir/img_000001.png Save ./image_dir/img_000002.png ...