あれもPython,これもPython

Pythonで世界を包みたい

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

そろそろ画像まわりも覚えていきたいので、
まず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)

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