実践 コンピュータビジョンを読んで、出てきたサンプルコードを試したりいじったりする企画、その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などが指定できるけどあまり変わらないので割愛。