Pillowで画像をresizeするときに使用するフィルタによって,処理時間にどの程度差があるかを比較してみました。
使用するフィルタ
- NEAREST
- BOX
- BILINEAR
- HAMMING
- BICUBIC
- LANCZOS
上のフィルタほど低品質・高速,下ほど高品質・低速らしいです。
pipでインストール
pip install pillow
importと画像の準備
from PIL import Image
im = Image.open('sample.jpg')
im.size
Out[3]: (4032, 3024)
余談ですが,画像を一度だけ読み込んでresizeを複数回実行すると,最初だけ時間がかなりかかって2回目以降は極端に時間が短くなったので,都度画像をopenして比較します。
計測結果
In [5]: im = Image.open('sample.jpg')
...: %time resized_im = im.resize(size=(256, 256), resample=Image.NEAREST)
...: im = Image.open('sample.jpg')
...: %time resized_im = im.resize(size=(256, 256), resample=Image.HAMMING)
...: im = Image.open('sample.jpg')
...: %time resized_im = im.resize(size=(256, 256), resample=Image.BILINEAR)
...: im = Image.open('sample.jpg')
...: %time resized_im = im.resize(size=(256, 256), resample=Image.BOX)
...: im = Image.open('sample.jpg')
...: %time resized_im = im.resize(size=(256, 256), resample=Image.BICUBIC)
...: im = Image.open('sample.jpg')
...: %time resized_im = im.resize(size=(256, 256), resample=Image.LANCZOS)
...:
...:
Wall time: 223 ms
Wall time: 241 ms
Wall time: 239 ms
Wall time: 224 ms
Wall time: 264 ms
Wall time: 295 ms
ということで,最大で(NEARESTとLANCZOS)処理時間が20~30%ほど変わってきそうです。