[Python]動画から静止画を簡単に抽出する方法[OpenCV]
抽出しようと思ったきっかけ
知り合いからとあるmp4動画を渡されて、「動画の中にある人物の気に入った表情を抽出したい」という要望があったので。
フリーソフトなどでもできるのですが、よいソフトが手元になかったことともあり、Python+OpenCVで実装してみました。
また、Pythonで実装するとそれを一連のシステムに組み込むこともできます。例えば監視カメラ等で撮影している動画から必要な画像を抽出し、必要な処理を加えるといった用途にも広げていけるのではないかと思います。
動画→静止画
「動画は静止画のあつまり」ということは皆さん、何となくお分かりかと思います。OpenCVで動画を読み込み、それを静止画に保存していくだけです。
ちょうど分かりやすい参考サイトがありましたので、今回はそのサイトを参考にしています。
# ライブラリのインポート
import cv2
import os
# 動画の名前を入力。
movie_name = 'desk'
# 動画を保存しているファイルパスを入力
path ='./datasets/'+ movie_name
# フォルダを作成
os.mkdir(path)
movie = path +'.mp4'
count = 0
# 動画の読み込み
cap = cv2.VideoCapture(movie)
while True:
ret, frame = cap.read()
if ret == True:
count += 1
cv2.imwrite(path +'/'+ movie_name + '_' + str("{0:05d}".format(count)) +'.jpg', frame)
else:
break
frameには画像情報が入っています。retは画像があるときはTrue,ないときはFalseを返します。
つまりretがTrueの間、画像ファイルの読み込みを続けるという意味になります。
imwriteで画像を書き出しています。+ movie_name + '_' + str("{0:05d}".format(count)) +'.jpg'のあたりですが、countに入っている値を整数5桁にして、「動画の名前」と.jpg拡張子とでファイル名を構成しています。
下記のサイトにわかりやすい表がございましたのでそちらも合わせてご参照ください。
こうすると、os.mkdir(path)したフォルダに画像がたくさん生成されます。
今回はフリー素材の画像を取得しています。
静止画を利用する
こうして取得した静止画ですが、もちろん趣味で画像を集めることのほかに、動画に映っている物体をAIで検出し、あやしい動きをしている人間を特定したりといった用途にも広がっていくわけです。いずれまた、その辺の動きも触れることできればと考えています。
この記事が気に入ったらサポートをしてみませんか?