Python/OpenCVの図形描画を使ってGIF動画を作る方法

  • このエントリーをはてなブックマークに追加

PythonとOpenCVを使えば図形描画も簡単です。ただ絵を描くだけだとつまらないので、ここでは線や円、四角形の描画の練習も兼ねて、GIF動画を作る所までを紹介します。

こんにちは。wat(@watlablog)です。プログラム的にちょっとした図形描画を覚えておくと結構便利!ここではOpenCVの図形描画を練習します

この記事の目標

作成する動画

この記事ではOpenCVの図形描画コードを練習するために、以下のGIF動画を作成します。

この絵に特に意味はありませんが、一つの画像の中で線、四角、円といった各図形の引数を関連付けてコマを作らないと動画は完成しませんので、これくらいの事ができるようになれば、ある程度自由に描画できるようになると思います。

OpenCVの描画機能で作成した動画

この動画は何に使う?

一体なぜこんな動画を作り始めたか、疑問に思う方もいらっしゃると思いますが、特に深い意味はありません。

この後画像のトラッキングコードを試したかったのですが、その目的で利用可能な動きのあるフリー素材がなかなか見つからず、無いなら作ってしまえというノリだけで作りました。

そのためこの記事はその前段階という事です。

動作環境

PC

本記事のコードは以下のWindows機とMac機の両方で確認しています。

Windows OS Windows10 64bit
CPU 2.4[GHz]
メモリ 4[GB]
Mac OS macOS Catalina 10.15.7
CPU 1.4[GHz]
メモリ 8[GB]

Python

Python関連のバージョンは次の通りです。OpenCVを使って図形描画を行いますが、計算やGIF作成にはNumpyやPillowも使っています。

Python Python 3.7.7
PyCharm (IDE) PyCharm CE 2020.1
Numpy 1.19.0
opencv-python 4.2.0.34
pillow 7.1.2

OpenCVによる図形描画の基礎コード

ここではいきなり動画まで作らず、基礎的な描画コードを試していきます。
とは言え、こちらのOpenCVチュートリアルの方をまずはご覧頂き、ここではさらっと済ませます。

線を描画する

線の描画は、
cv2.line(描画する画像, 始点, 終点, 色)で行います。オプションでthickness(線の太さ)等を設定する事が可能です。

以下のコードは背景画像を適当な色で生成し、背景画像に対して線描画を行なっているPythonコード例です。

こんな感じで描画可能です。

OpenCVによる線の描画例

四角形を描画する

四角形は線と同様の引数で、
cv2.rectangle(描画する画像, 始点, 終点, 色)で描画します。
thickness=-1と負値にする事で、内部を塗り潰す事も可能です。

下図は始点と終点で作成した四角形の中身を塗り潰してみた結果です。

OpenCVによる四角形の描画例

円を描画する

円は中心座標と半径を使って、
cv2.circle(描画する画像, 中心点, 半径, 色)で描きます。thicknessの考え方は四角形と同様です。

下図が結果です。今回はここまでの内容で動画を作成していきます。

OpenCVによる円の描画例

OpenCVで図形描画した画像を動画にするコード

以下のコードが冒頭で紹介した動画を生成するコードです。
構成は「Pythonで複数画像からGIFを作る時に便利な処理まとめ」で紹介した内容とほぼ同じですが、inputというフォルダに図形描画済み画像を保存していき、別関数でanimation.gifというGIF動画を作っています。

何かと便利なので僕は毎回この方法で動画を作っています。

肝心の図形ですが、四角形の座標を移動させるのと連動して円と線も移動するように関連付けています。線は円の中心で回転させるように式で書いているのがみそです(車輪をイメージしていますが特に意味はない)。

上記コードを実行する事で冒頭の動画が保存されます。多分実行時間は一瞬と思います。

OpenCVの描画機能で作成した動画(再掲)

まとめ

またつまらぬものを作ってしまった…

今回はチュートリアルにもある描画機能を使ってみたという事と、各引数に関連を付けて一つのオブジェクトとして動作するように動画を作成するという内容でした。

次回この動画を使ってトラッキングをする予定です。

図形の描画は画像内にちょっとした指示を入れる時にも重宝します!是非使ってみて下さい!
Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*