Tutorialに学ぶPillowの使い方②|Pythonによる可視化入門 #10

f:id:lib-arts:20191219181032p:plain

連載の経緯は#1をご確認ください。

#1〜#4まではMatplotlibに関して、#5〜#8まではseabornについてまとめました。

Matplotlibの使い方①(plt.plot、plt.scatter、plt.hist)|Pythonによる可視化入門 #1 - lib-arts’s diary

Tutorialに学ぶseabornの使い方①(概要&Visualizing statistical relationships)|Pythonによる可視化入門 #5 - lib-arts’s diary

#9からはPythonの描画ライブラリであるPillowについて取り扱います。PillowはPIL(Python Imaging Library)のforkとされています。
#9ではPillowの概要と、チュートリアルより"Using the Image class"を取り扱いました。
https://lib-arts.hatenablog.com/entry/Python_visualize9
#10では同様にチュートリアルより、"Cutting, pasting, and merging images"〜"Geometrical transforms"の内容を取り扱います。
以下目次になります。
1. Cutting, pasting, and merging images
2. Geometrical transforms
3. まとめ


1. Cutting, pasting, and merging images
1節では画像の切り取りや貼り付けなどの処理を取り扱っている、"Cutting, pasting, and merging images"について確認します。

f:id:lib-arts:20191223195200p:plain

Tutorial — Pillow (PIL Fork) 6.2.1 documentation

冒頭部では、「Imageクラスでは画像の領域を操作する機能が実装されており、四角形の領域を画像から取り出すにはcrop()メソッドを用いることで実現できる」と記述されています。以下実装を元に確認していきます。

from PIL import Image

im = Image.open("Python_logo.png")
print(im.format, im.size, im.mode)

box = (20, 20, 200, 200)
region = im.crop(box)

上記を動かすと下記のような結果が出力されます。

f:id:lib-arts:20191223215616p:plain

画像の一部が切り取られていることがわかります。
次に下記を実行してみます。

region = region.transpose(Image.ROTATE_180)
im.paste(region, box)
im.show()

実行結果は下記のようになります。

f:id:lib-arts:20191223220452p:plain

切り取られた画像を180度回転した上で、再度貼り付けていることがわかります。このようにPillowを用いることで画像を切り取ったり貼り付けたりが可能になります。
大体のイメージがつかめたので1節はここまでとします。


2. Geometrical transforms
2節では幾何的な変換を取り扱っている"Geometrical transforms"について確認していきます。

f:id:lib-arts:20191223221038p:plain

Tutorial — Pillow (PIL Fork) 6.2.1 documentation
冒頭部では、「PIL.Image.Imageクラスでは画像のサイズ変更や回転を取り扱うresize()やrotate()のメソッドが実装されている」と記述されています。rotateメソッドは半時計周り(counter-clockwise)で画像を回転させるとされています。以下実装を元に確認していきます。

im = Image.open("Python_logo.png")

out = im.resize*1
print(out.size)
out = im.rotate(45) # degrees counter-clockwise

out.show()

実行結果は下記になります。

f:id:lib-arts:20191223221840p:plain

まず、out = im.resize*2を行うことで、画像のリサイズが行えていることがわかります。また、im.rotate(45)で画像を反時計回りに45度回転できていることが確認できます。

f:id:lib-arts:20191223222127p:plain

また、90度単位で回転させる時には上記のようにtransposeメソッドを用いることでも実現できるとされています。こちらについては覚えておく程度でも十分そうです。
大体の概要については確認できたので2節はここまでとします。


3. まとめ
#10ではPillowのチュートリアルより、"Cutting, pasting, and merging images"〜"Geometrical transforms"の内容を取り扱いました。
#11では"Color transforms"以降について取り扱います。

*1:128, 128

*2:128, 128