実践 コンピュータビジョンを読んで、出てきたサンプルコードを試したりいじったりする企画、その1-1。
書籍内ではPILを使っているけど現在はそのForkの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を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('l')でグレースケールにするのは既に試した。他も試してみる。
まず1で白黒画像にできる。
img = img.convert("1")
img.save('bar.jpg')
Pで256色になる。
img = img.convert("P")
img.save('bar.png')
若干減色した感がある。
あとは RGB, RGBA, CMYKなどが指定できるけどあまり変わらないので割愛。