Pythonの画像処理ライブラリ Pillow

Pillowは、開発が停止しているPIL(Python Image Library)からフォークされた画像処理ライブラリ。

インストール

pipでインストール。

$ pip install Pillow

PillowとPILは共存出来ない。両方インストールしてしまった場合は、まず両方ともアンインストールしてから片方だけをインストールし直すのが良い。

何がインストールされているかわからない場合は、

$ pip list

で確認できる。アンインストールは、

$ pip uninstall <package>

使い方

公式リファレンスがしっかりしていて分かりやすい。

画像読み込み、処理、保存

各色の最小値と最大値やヒストグラムを取得したり、変換や回転、フィルターなどの処理をかけたりできる。そのほかにもcropresizeなど色々ある。

from PIL import Image, ImageFilter
im = Image.open('lena.jpg') # ファイル読み込み
print(im.format, im.size, im.mode) # メタ情報
# => JPEG (512, 512) RGB
print(im.getextrema()) # RGB各色の最小値と最大値
# => ((50, 255), (0, 247), (29, 225))
print(im.getpixel((256, 256))) # 指定した座標の色(原点は左上)
# => (181, 66, 73)
print(im.histogram()) # ヒストグラム
# 白黒に変換、90度回転、ガウシアンブラー
new_im = im.convert('L').rotate(90).filter(ImageFilter.GaussianBlur())
new_im.show() # 画像表示(デフォルトのソフトで)
new_im.save('lena_pillow.jpg', quality=95) # 保存

save()で保存する際は拡張子に応じて引数が異なる。詳細はImage file formatを参照。

jpgの場合は品質を指定できる。1(最低)から95(最高)まででデフォルトは75

元画像と処理後の画像は以下の通り。

originalprocessed

図形描画

図形の描画もできる。

ImageDraw Moduleを使う。

from PIL import Image, ImageDraw, ImageFont
im = Image.new("RGB", (512, 512), (128, 128, 128)) # 画像新規作成
draw = ImageDraw.Draw(im)
# 線、四角、楕円
draw.line((0, im.height, im.width, 0), fill=(255, 0, 0), width=8)
draw.rectangle((100, 100, 200, 200), fill=(0, 255, 0))
draw.ellipse((250, 300, 450, 400), fill=(0, 0, 255))
# テキスト
font = ImageFont.truetype('/Library/Fonts/Arial Bold.ttf', 48)
draw.multiline_text((0, 0), 'Pillow sample', fill=(0, 0, 0), font=font)
im.save('pillow_sample.jpg', quality=95)

こんな感じ。

pillow_sample

この例では最初にベタ画像を生成しているが、画像ファイルを読み込んでその上に描画することも可能。

スポンサーリンク

関連記事