【python-openCV】画像回転⇒gifアニメを作成する方法!

f:id:yshgs_elec:20210311213643p:plain

この記事では、ある画像を少しずつ回転させながら、gifアニメを作成する方法をご紹介していきます。

 

使用する画像

回転動画を作成するサンプル画像

完成動画

サンプル画像を回転動画にした結果

こんなものを作ったところで何の役にも立ちませんが、こいつを作成するためにはpythonに関する様々な知識が必要とされます。

 

python初学者にとっては非常に勉強になる内容になっていると思います。

 

ぜひ最後までご覧ください。

 

それでは早速やっていきます!

 

※Pythonのインストールから始めたい方は以下からご覧ください。

 

スポンサーリンク

必要なライブラリ

◆openCV:Ver.4.5.1.48

◆numpy:Ver.1.19.5

◆Pillow 7.0.0

バージョンは参考情報です。

おそらくバージョンが違っても動作するはずです。

 

openCV以外はAnacondaを使用すればあらかじめインストールされていますが、openCVは自分で追加インストールが必要です。

 

openCVのインストール方法については以下の記事で解説しています。

 

スポンサーリンク

回転動画を作成するサンプルコード

下準備が整ったところで、早速コードを記述していきましょう。

以下が冒頭にお見せして動画を作成するサンプルコードです。

 

今回は、読み込む画像は白黒画像で実行していきますが、基本的にはカラー画像にも適用可能です。

#ライブラリのインポート
from PIL import Image
import cv2
import numpy as np
import os
import glob
#画像の読み込み
pic1=cv2.imread('mouse.jpg',cv2.IMREAD_GRAYSCALE)
h,w=pic1.shape[:2]
#画像回転ベース処理
ROT= cv2.getRotationMatrix2D(center=(w / 2, h / 2), angle=36, scale=1)
#画像を入れる箱を準備
pictures=[]
#画像の回転⇒画像を箱に入れていく
for i in range(9):
    pic1 = cv2.warpAffine(pic1, ROT, dsize=(w, h))
    cv2.imwrite('out'+str(i)+'.jpg',np.array(pic1))
    img = Image.open('out'+str(i)+'.jpg')
    pictures.append(img)
    #gifアニメを出力する
    pictures[0].save('anime.gif',save_all=True, append_images=pictures[1:], optimize=True, duration=100, loop=0)
    #途中で作ったファイルを削除する
    list = glob.glob('out*') 
    for file in list: 
        os.remove(file)

もし上記のプログラムでエラーが出た際は以下の記事の後半を参考にしてみてください。

【python】複数画像からパラパラ漫画(gifアニメ)を作成する方法!

 

スポンサーリンク

サンプルコードの解説

先ほどのコードを見ていただけるとわかると思いますが、やっていることは単純でも以外と長いコードが必要だということがわかると思います。

 

ここからは、今後あなたが応用して何かを作れるように、先ほどのコードの中で重要なところを解説していきます。

①画像の読み込み

openCVを使って画像を読み込みます。

⇒pic1=cv2.imread・・・

cv2.IMREAD_GRAYSCALEの部分を

cv2.IMREAD_COLORにするとカラー画像を読み込めます。

また、回転後も縦、横のピクセル数が変わらないようにするために、読み込んだ直後に縦、横のピクセル数を測っています。

⇒h,w=pic1.shape[:2]

 

②回転処理の下準備

⇒ROT= cv2.getRotationMatrix2D・・・

ここでどのような回転処理を行うかを宣言しておきます。

注意していただきたいのは、ここで実際に画像を回転させているわけではありません。

設計図のようなものを書いていると思っていただければOKです。

 

③実際の回転処理⇒画像保存

⇒pic1 = cv2.warpAffine・・・

ここで先ほど②で作成した設計図をもとに①で読み込んだ画像を回転させます。

そして回転させた画像を

⇒cv2.imwrite・・・

という作業で保存していきます。

 

④動画作成

⇒pictures[0].save(‘anime.gif’,save_all=True, append_images=pictures[1:],
optimize=True, duration=100, loop=0)

duration:パラパラ漫画のコマ送り速度(単位ミリ秒)

loop:ループ回数(0で無限再生)

ここはもうこうゆうふうに書くと割り切っておいた方が良いでしょう。

 

⑤画像削除

動画作成が終わった段階では、動画用に作成した画像ファイルがたくさん残っている状態です。

残しておいても意味がないと思いますので、この記事のサンプルコードでは削除するように記述しています。

⇒該当箇所

list = glob.glob(‘out*’)
for file in list:
os.remove(file)

今回、途中で作成した画像はout*.jpgという名前で保存されています。

pythonでワイルドカードを使う場合は、globというライブラリを使用することで該当するファイル一覧を取得することができます。

そしてos.removeにて、取得したそれぞれの画像を削除しています。

 

これら作業は画像処理を行っていると頻繁にでくわす内容です。

ぜひ覚えておきましょう。

 

スポンサーリンク

おわりに

というわけで今回はpythonを使って、ある画像の回転動画を作成する方法をご紹介しました。

画像を回転させて、動画にするという言葉で表せば非常に簡単なことですが、実際にコードにしてみると意外と面倒でしたね。

 

とはいえ、これらをしっかりとマスターしていくことで、今後どんな状況がきても柔軟に対応できるようになるはずです。

ぜひひとつひとつ習得していきましょう。

 

このように、私のブログでは様々なプログラミングスキルを紹介しています。

 

今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。

確実にスキルアップできるはずです。

最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。

↓ 応援ボタン

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

それではまた!

コメント

タイトルとURLをコピーしました