Pythonでいろいろやってみる

Pythonを使った画像処理や機械学習などの簡単なプログラムを載せています。

画像を描画しMP4動画を作成する

OpenCVのcv2.VideoWriterメソッドを使うと複数の画像ファイルから動画を作成することができます。ここではpillowで画像を描画・保存し、OpenCVで動画化しています。

関連記事

画像を描画しアニメーションGIFを作成する

環境
  • windows10 home
  • Anaconda 3/ jupyter notebook 5.6.0
  • Python 3.7.0
  • Pillow 5.2.0
  • OpenCV 4.0.0.21
やること
  • 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で再生した際のスクリーンショットを載せています) f:id:T_A_T:20200209125919p:plain

以下のサイトを参考にさせていただきました

Python3+OpenCVで静止画から動画を作成する
OpenCV-Python Tutorials 1 documentation>>動画を扱う

ブログランキングに参加しています

にほんブログ村 IT技術ブログへ
にほんブログ村