💨
Pythonでgifアニメを作成してみた
前置き
本記事は4月12日開催のオトナの機械学習入門@XOSSPOINT.にて発表したLT資料を加筆、修正したものになります。
はじめに
- 春なので、植物の画像をgifアニメにすると伸び具合が分かって面白そうだったから
- 今回はモウセンゴケのgifアニメを作ってみました(←!?)
- 注)モウセンゴケは食虫植物
準備
- こちらの記事を参考にしました
- 3日間、朝/昼/夕方に1枚ずつ写真撮影
- 画像ファイル名に自動付番されていることが条件
- 実行環境は
Windows 11
- 使用ライブラリは
Python 3.9.1
,Pillow 9.5.0
- Pythonインストール方法については省略
pip install pillow
成果物
Pythonコード
from PIL import Image
import os
# 画像ファイルの名前を格納するリストを用意
list_file_name = []
# 画像データを格納するリストを用意
list_images = []
# 画像ファイルとPythonプログラムは同じ場所に置いたのでカレントディレクトリを指定
dir = './'
for file_name in os.listdir(dir):
# ファイル名の最後がJPGのものをリストに追加
if file_name.endswith('JPG'):
list_file_name.append(file_name)
# 念のため画像ファイル名の順番をソート
list_file_name.sort()
# 倍率0.25倍を指定
ratio = 0.25
for i in list_file_name:
img = Image.open(i)
# 画像のリサイズ
resized_img = img.resize((int(img.width * ratio), int(img.height * ratio)))
# 画像の回転
rotated_resized_img = resized_img.rotate(270)
list_images.append(rotated_resized_img)
list_images[0].save('mousengoke.gif',save_all=True, append_images=list_images[1:],
optimize=True, duration=200, loop=0)
gifアニメ
撮影位置を固定しなかったため生長がわかりづらい。よく見るとつるみたいなものが伸びている。
学び
sort()とsorted()の違い
- sort()はリストの中身を並べ替えて上書きする
- sorted()リストの中身を並べ替えて表示するだけ
- 参考:https://docs.python.org/ja/3/howto/sorting.html
Pillowによる画像の扱い方
- PillowとはPythonの画像処理ライブラリ
- 画像のリサイズ
-
画像.resize(幅, 高さ)
でリサイズが可能
-
resized_img = img.resize((int(img.width * ratio), int(img.height * ratio)))
- 画像の回転(以下のコードは左に270度回転)
- 縦の写真でgifアニメを出力すると横向き(90度左向き)になってしまうので、以下のコードを追加して上向きになるようにした
rotated_resized_img = resized_img.rotate(270)
- gifアニメの出力
- 元画像がたくさんあればdurationの数値を100など小さくすることで滑らかなgifアニメが出力できると思う
list_images[0].save('mousengoke.gif',save_all=True, append_images=list_images[1:],
optimize=True, duration=200, loop=0)
最後に
コロナ禍になってから初めてのオフライン勉強会に参加しました。
今の仕事では機械学習は全く縁がないのでハンズオンが体験できて良かったです。
Discussion