2013/09/25

ライブラリ:PIL

Pythonの「PIL」というライブラリについてご紹介します。

from PIL import Image

「PIL」は画像データを扱うため機能をひとまとめにしたライブラリです。名前の「PIL」は「Python Imaging Library」の省略形です。

bmp、tiff、gif、jpg、pngといったメジャーなフォーマットでの読み書きにはひととおり対応しており、機能が豊富なので、「Pythonで画像処理といえばPIL」といった位置づけになっているようです。

以下、基本的な使い方をざっくりと見ていきます。

画像の読み込み

from PIL import Image

image = Image.open('lenna.png')
print image.__class__
# PIL.PngImagePlugin.PngImageFileと表示
Image.open()で画像データを読み込むことができます。PngImageFileクラスなどのインスタンスが生成されて返されるので、その後はそのインスタンスに対して処理を施していきます。

画像の表示

image.show()
show()メソッドで画像を表示することができます。OSでその画像フォーマットに関連づけられているソフトが起動します。

画像の保存

image.save('lenna_changed.png')
save()メソッドにファイル名を与えれば、画像を保存することができます。

画像のメタ情報へのアクセス

print image.filename  # lenna.pngなどと表示
print image.format, image.size, image.mode
# PNG (220, 220) RGBAなどと表示
ファイル名(ある場合のみ)や画像フォーマット、サイズやカラーモードなどのメタ情報は、各種アトリビュートの中に入っています。image.modeは「L」「RGB」「CMYK」などの値を取り、Lならグレースケール、RGBならRGB、CMYKならCMYKなどのカラーモードを意味します。

for k, v in image.info.items():
    print k, v
# たとえば以下のとおり表示
# aspect (72, 72)
# gamma 0.45455
画素のアスペクト比、ガンマ値などの情報はinfoの中に入っています。

画素データへのアクセス

画素データにアクセスするには、大きく2通りの方法があります。ひとつはgetdata()、もうひとつはgetpixel()です。

px = image.getdata()
print px[3]  # (227, 138, 125, 255)などと表示
getdata()を使うと、すべての画素データを1列にまとめて取得することができます。getdata()とは逆にデータを書き込む方はputdata()メソッドです。

image.getpixel((x, y))
getpixel()だと、1画素単位で情報を取得することができます。取得とは逆にセットする方はputpixel()で行えます。

画像の新規作成

image = Image.new("RGB", (100, 100))
image.show()  # まっさらの画像が表示される
new()メソッドにカラーモードとサイズを渡せば、画像を新規作成することができます。

画像の統計値へのアクセス

from PIL import ImageStat

stat = ImageStat.Stat(image)
print 'pixel num:', stat.count
print 'pixel sum:', stat.sum
print 'pixel mean:', stat.mean
print 'pixel variance:', stat.var
print 'pixel stddev:', stat.stddev
# それぞれRGBAの統計値がタプルに収められて返される
ImageStat.Stat()という関数を使うと、画素の統計情報をまとめて取得することができます。countは画素の総数、sumは合計、meanは平均、varやstddevは分散や標準偏差をそれぞれ格納しています。

以上です。

この他にも、回転、拡大縮小、切り取り、明るさ・コントラストの調整といったことができます。文字や図形の書き込み、ふたつの画像の重ね合わせといった少し凝った処理なんかもメソッドひとつでできたりするので、基本的な使い方をひととおり覚えておくと便利です。


インストール
pipが入っていれば
pip install PIL
でインストールできます。


参考
PIL
Python Imaging Library Handbook
Python Imaging Library (PIL) 利用ノート - プレハブ小屋
画像処理でのPythonの利用 - slideshare

0 件のコメント: