たそらぼ

日頃思ったこととかメモとか。

Pillowの画像処理と仲良くなる

画像処理のニューラルネットを使うのに、画像の変換に慣れておらず困ったのでPillowの使い方を調べました。
この時、データセットの作成に必要そうな操作をまとめました。

インストール、準備

pipで普通に入ります。

pip3 install pillow

pythonで使う時はPILから読み込みます。

from PIL import Image

画像はなんでもいいですが、お馴染みLenaさんを用意しておきます。
f:id:tasotasoso:20200118234841j:plain:w300

読み込み・表示・セーブ

#読み込み
im = Image.open("./lena.jpg")

#表示
im.show()

#保存
im.save("./lena2.jpg", "JPEG")

回転、反転

#回転
out = im.transpose(Image.ROTATE_90)
out = im.transpose(Image.ROTATE_180)
out = im.transpose(Image.ROTATE_270)

out = im.rotate(45)

#反転
out = im.transpose(Image.FLIP_LEFT_RIGHT)
out = im.transpose(Image.FLIP_TOP_BOTTOM)

90度回転させた結果。
f:id:tasotasoso:20200118235706j:plain:w300

45度回転させた結果。
f:id:tasotasoso:20200119000454j:plain:w300

反転させた結果。
f:id:tasotasoso:20200118235701j:plain:w300

リサイズ・crop

#リサイズ
out = im.resize((128, 128))

#crop
box = (100, 100, 400, 400)
out = im.crop(box)

cropした結果。
f:id:tasotasoso:20200119000250j:plain:w300

グレースケール

#グレースケール
im.convert("L")

グレースケールした結果。
f:id:tasotasoso:20200119000612j:plain:w300

numpy配列への変換

モデルに突っ込むためにはnumpy配列にしたい。これはnp.array()を使うと簡単に可能です。

out_nparray  = np.array(im)

out_nparray.shape
#(520, 520, 3)
out_nparray.transpose(2, 0, 1)
#(3, 520, 520)

out_nparray.dtype
#dtype('uint8')

参考

Pillow公式チュートリアル
pillow.readthedocs.io

画像のLenaさんについて
ja.wikipedia.org

Pillowの画像をNumpy配列に変換する
note.nkmk.me