画像を描画しMP4動画を作成する
OpenCVのcv2.VideoWriterメソッドを使うと複数の画像ファイルから動画を作成することができます。ここではpillowで画像を描画・保存し、OpenCVで動画化しています。
関連記事
環境
やること
- 640x480の黒ベタ画像を描画
- 直径200pxの赤で塗りつぶした円を描画
- 「赤い丸が動きます」という文字48ptのメイリオで描画
- 円の描画位置を変えたイメージオブジェクトを20個生成しpngファイルで保存
- 20個のpngファイルからムービーを作成、mp4ファイルで保存
コード
Pillowで赤い円の位置を変えたpng画像を20個保存し 、OpenCVで20個のpngファイルからmp4動画を作成しています。 durationは画像の表示間隔(ここでは50ms)、loopはGIFの繰り返し(0は無限)の設定です。
from PIL import Image, ImageDraw, ImageFont import cv2 for i in range(20): im = Image.new('RGB', (640, 480), (0, 0, 0)) # 下地となるイメージオブジェクトの生成 draw = ImageDraw.Draw(im) # drawオブジェクトを生成 ellipse_x = i *20 # 描画位置のx座標 draw.ellipse((ellipse_x, 150, ellipse_x+200, 350), fill=(255, 0, 0)) # 円の描画 font = ImageFont.truetype('C:\Windows\Fonts\meiryo.ttc', 48) # フォントの指定 draw.multiline_text((100, 50), '赤い丸が動きます', fill=(255,255,255), font=font) # 文字の描画 filename = str(i).zfill(4) # 右寄せ0詰めで連番のファイル名を作成 im.save(filename+'.png', quality=95) # 画像保存 fourcc = cv2.VideoWriter_fourcc('m','p','4', 'v') # コーデックの指定 video = cv2.VideoWriter('movie.mp4', fourcc, 20.0, (640, 480)) # VideoWriter型のオブジェクトを生成、再生速度20fps、サイズは画像と同じにする for i in range(20): filename = str(i).zfill(4)+'.png' # 読み出すpngファイル名の設定 img = cv2.imread(filename) # pngファイル読み出し video.write(img) # 動画の生成 video.release() # 動画ファイルを閉じる
実行結果
赤い丸が左から右に移動する長さ1秒の動画が作成・保存されます。 (このブログには動画ファイルを直接貼れないのでMedia Playerで再生した際のスクリーンショットを載せています)
以下のサイトを参考にさせていただきました
Python3+OpenCVで静止画から動画を作成する
OpenCV-Python Tutorials 1 documentation>>動画を扱う