少しずつ画像がはっきりする動画
ぼやけた画像からはっきりした画像へと少しずつ変化する動画を作成します。
画像処理にはライブラリPillowを用い、ぼかし方として
①モザイク処理
②Blur処理
の2つを用いて、時間と共にぼかしを弱くするGIFアニメーションを作成します。
関連記事
環境
- windows10 home
- Anaconda 3/ jupyter notebook 5.6.0
- Python 3.7.0
- Pillow 5.2.0
準備
画像ファイルはフリー写真素材ぱくたそからダウンロードさせていただき、jupyter notebookファイル(***.ipynb)と同じディレクトリにファイル名'city.jpg'で保存しました。
①モザイク処理
モザイク処理はPillowのresizeメソッドで画像を小さくし元の大きさに戻すことで行います。縮小率が大きい程大きなモザイクとなるので、縮小率を小さくしながらモザイク処理を行いGIFアニメにしています。
コード
from PIL import Image img = Image.open('city.jpg') # 元画像読み出し width, height = img.size # サイズの取得 img_list = [] # 画像保存用リスト # モザイク処理 for i in range(41,0,-1): # 縮小画像サイズを大きくしながらモザイク処理をする img_r = img.resize((int(width/i), int(height/i))).resize((width, height)) img_list.append(img_r) #アニメーションgifファイルを作成(1フレーム200ms,ループ) img_list[0].save('mosaic.gif', save_all=True, append_images=img_list[1:], optimize=True, duration=200, loop=0)
実行結果
②Blur処理
Blurは画像をぼかす処理でぼかし半径が大きい程ぼけた画像になります。ぼかし半径を小さくしながらBlur処理を行いGIFアニメにしています。Pillowのimageモジュールに含まれるfilterメソッドとImageFilterモジュールに含まれるGaussianBlur関数を用いています。
コード
from PIL import Image, ImageFilter img = Image.open('city.jpg') # 元画像読み出し width, height = img.size # サイズの取得 img_list = [] # 画像保存用リスト # モザイク処理 for i in range(35,0,-1): # Blur radius(ぼかし半径)を小さくしながらGaussianBlur処理をする img_r = img.filter(ImageFilter.GaussianBlur(i)) img_list.append(img_r) #アニメーションgifファイルを作成(1フレーム200ms,ループ) img_list[0].save('blur.gif', save_all=True, append_images=img_list[1:], optimize=True, duration=200, loop=0)
実行結果
以下のサイトを参考にさせていただきました
Pythonの文法メモ > 【Pillow】画像の縮小拡大、切り抜き
Pythonの文法メモ > 【Pillow】ImageFilterモジュールによる画像平滑化・エッジ強調・エッジ検出