目的
様々なPythonモジュールにおける画像ファイルの読み込み方法、および読み込まれた画像の状態についてまとめる
ラインナップ
- pillow
- openCV
- torchvision (PyTorchのサブモジュール)
- keras.preprocessing.image
- scikit-image
- imageio (画像入出力に特化したシンプルなライブラリ)
- imgaug (画像前処理ライブラリ)
比較
前提
import numpy as np
import pathlib
from PIL import Image
import cv2 as cv
import skimage
import imageio
import imgaug as ia
from keras.preprocessing import image as k_prep_img
import torchvision
path = pathlib.Path("path/to/the/image/file")
比較表
pillow | openCV | torchvision | keras.preprocessing | skimage | imageio | imgaug | |
---|---|---|---|---|---|---|---|
画像読み込み | Image.open(path) |
cv.imread(path.name) |
torchvision.io.read_image(path) |
k_prep_img.load_img(path) |
skimage.io.imread(path) |
cv.imageio(path) |
ia.imageio.imread(path) |
画像の状態 | Imageオブジェクト | numpy配列 | tensor | numpy配列 | numpy配列 | numpy配列 | numpy配列 |
チャネル順 | RGB | BGR | BGR | 調査中 | RGB | RGB | RGB |
補足
- openCVではpathlibのPathオブジェクトをそのまま引数に与えることができなかったので
.name
としてファイル名を取り出している。 - pillowで読み込んだ画像をnumpy変換するには
np.asarray(image)
とするが、元のImageオブジェクトの保有するデータへの参照としてのnumpy配列が作られるので、デフォルトでflags.writable = False
になっている。処理する前提でnumpyにしたい場合はnp.array(image)
とすればいい。
所感
imageioが一番シンプルに書ける。
TODO
処理速度の観点での比較をする