読者です 読者をやめる 読者になる 読者になる

あれもPython,これもPython

Pythonで世界を包みたい

Pythonで画像編集がしたい(Pillowを使う)

Python勉強記(モジュール毎)

そろそろ画像まわりも覚えていきたいので、
まずPillowをためす。

機械学習なんかをするにはOpenCVやnumpyで画像を扱える必要があるのだろうけど、
まずは簡単な画像編集から。

Pillowとは

PillowはPILというモジュールがForkされたもの。
PIL自体の開発は止まっているのだけれど、
Pillowはimport PILで使えるので、
昔はPIL使ってたコードもそのまま使える配慮をしてくれている。

導入

pip install Pillow

pillowとlower caseにすると全く関係ないモジュールが入るので注意。

使い方

とりあえず適当な画像をダウンロードしてきて、
読み込んでみる。

画像のダウンロードにはwgetというモジュールを使った。

from PIL import Image
import wget

img_url = 'ダウンロードしてくる画像のURL'
f_name = wget.download(img_url)

img = Image.open(f_name)

サイズまわり

画像オブジェクトはsizeアトリビュートに幅と高さを持ってる。
resizeメソッドでタプルを放り込んでサイズを変えることが可能。
(クロップではなく、サイズそのものの変更)

w,h = img.size
#(width,height)のタプル

resize_img = img.resize((w*2,h*2))

切り出したい場合はcropで。
座標を指定してあげて四角形に切り出す。

crop_img = img.crop((100,200,200,300))

transpose

transposeメソッドを使うと画像の向きを変えられる
引数で回転方向を指定できる

  • Image.ROTATE_180やImage.ROTATE_90で回転角度を調整
  • Image.FLIP_LEFT_RIGHTやImage.FLIP_TOP_BOTTOMで反転
# 左右反転
flip_img = resize_img.transpose(Image.FLIP_LEFT_RIGHT)

# 90度回転
rotate_img = flip_img.transpose(Image.ROTATE_90)
# ちなみにimg.rotate(角度)でも可能

## convert 色の変更はconvertで

python # グレースケール cvt_gray = img.convert('L') 引数にLを与えるとグレースケール、1で白黒など。
RBGが欲しい場合はimg.split()で取れる。
mergeRGBも変えられる。

python r,g,b = img.split() img = Image.merge("RGB",(g,b,r))

## 画像の保存

保存は.save()するだけ。
引数で色々できる模様

# 保存
 img.save("ファイル名","ファイル形式")

 # 表示
 img.show()

なお、matplotlib でも表示出来る模様

import matplotlib.pyplot as plt

plt.imshow(img)

まだ機能がありそうなので、
画像処理分野をおいおいと。