Pillow(Python Imaging Library)のインストールと簡単なサンプルコード

概要

実践 コンピュータビジョンを読んで、出てきたサンプルコードを試したりいじったりする企画、その1-1。

書籍内ではPILを使っているけど現在はそのForkのPillowを使った方が良いよ的な話を見かけたので、そっちを利用。

@CretedDate 2015/01/19
@Versions Python 2.7.6, Pillow2.7

Pillowのインストール

pipで入れられる。

$ sudo pip install Pillow

ドキュメントとかは下記にある。

http://pillow.readthedocs.org/

グレースケールに変換する

まず、適当な画像を用意する。free imageから拝借。

サンプル画像

これをグレースケールに変換するコード。

from PIL import Image

# 画像を読み込む
img = Image.open( 'foo.jpg' )
# グレースケールに変換
gray_img = img.convert('L')
# 保存
gray_img.save( 'gray.jpg' )

出来上がったgray.jpgがこちら。

サンプル画像

サムネイルの作成

上の絵のサイズは300*225なので、適当に64*64のサムネイルを作ってみる。

img = Image.open( 'foo.jpg' )
img.thumbnail( (64, 64) )
img.save( 'thumbnail.jpg' )

出来上がった画像。64*64だとだいぶ小さい。

サンプル画像

領域のコピーと貼り付け

128*128のサムネイルをコピーして180度回転させて、元画像の真ん中に貼ってみる。

# グレースケール画像を作る
img = Image.open( 'foo.jpg' )

# 180度反転したサムネイル画像を作る
thumb = Image.open( 'foo.jpg' )
thumb.thumbnail( (128, 128) )
thumb = thumb.transpose(Image.ROTATE_180)

# 貼り付け
img.paste(thumb, ((300-128)/2, (225-128)/2))
# 保存
img.save('bar.jpg')

サンプル画像

拡大縮小と回転

600*450に拡大してみる。

img = Image.open( 'foo.jpg' )
img = img.resize( (600, 450) )
img.save( 'bar.jpg' )

結果。クリックで拡大されます。ちょい荒くなってる。

サンプル画像

次、回転。45度右に傾け。

img = Image.open( 'foo.jpg' )
img = img.rotate( 45 )
img.save( 'bar.jpg' )

サンプル画像

左右・上下反転

上の項までが実践 コンピュータビジョンに沿った内容。ここからはPillowのチュートリアルを見ながら記述。

左右・上下の反転。

img = Image.open( 'foo.jpg' )

# 左右反転
flip_lr = img.transpose(Image.FLIP_LEFT_RIGHT)
# 上下反転
flip_tb = img.transpose(Image.FLIP_TOP_BOTTOM)

# 1枚に合成
img.paste( img.resize((150, 112)), (0, 0, 150, 112) )
img.paste( flip_lr.resize((150, 112)), (0, 113, 150, 225) )
img.paste( flip_tb.resize((150, 112)), (150, 113, 300, 225) )
img.save( 'bar.jpg' )

説明。左上に元画像の縮小版、左下に左右回転させた画像の縮小版、右下に上下回転させた画像の縮小版を貼っている。

サンプル画像

RGBの入れ替え

RGBをsplitして、rとbを入れ替えた画像を作ってみる。

img = Image.open( 'foo.jpg' )
r, g, b = img.split()
img = Image.merge("RGB", (b, g, r))
img.save( 'bar.jpg' )

青いバラ、咲いた。

サンプル画像

画像サイズを取得する

sizeでtupleが返る。

x, y = img.size

convertで白黒画像や256色

convert('l')でグレースケールにするのは既に試した。他も試してみる。

まず1で白黒画像にできる。

img = img.convert("1")
img.save('bar.jpg')

サンプル画像

Pで256色になる。

img = img.convert("P")
img.save('bar.png')

若干減色した感がある。

サンプル画像

あとは RGB, RGBA, CMYKなどが指定できるけどあまり変わらないので割愛。