そろそろ画像まわりも覚えていきたいので、
まず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()
で取れる。
merge
でRGBも変えられる。
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)
まだ機能がありそうなので、
画像処理分野をおいおいと。