Pillowで画像(画像データ)を拡大/縮小するには、Imageクラスのresizeメソッドを用います。
構文
Image.resize(size, resample=None, box=None, reducing_gap=None)
パラメータ
引数名 | 説明 |
size | リサイズ後の大きさを (幅, 高さ)のタプルで指定します。 |
resample | リサイズ時の補間方法を指定します。 Image.NEAREST Image.BOX Image.BILINEAR Image.HAMMING Image.BICUBIC Image.LANCZOS 画像の mode が 1, P や I;16などのビット指定モードのときは、Image.NEAREST が初期値 その他の場合、Image.BICUBICが初期値 |
box | 画像を拡大/縮小する領域を(左, 上, 右, 下)の座標のタプルで指定します。 初期値は(0, 0, 画像の幅, 画像の高さ)の画像全体 cropメソッドの処理と同じ |
reducing_gap | リサイズ時の最適化(詳細わからず。。) 初期値: None (最適化なし) |
戻り値 | リサイズされた画像(PIL.Image) |
サンプル
from PIL import Image
# 画像を開く
img = Image.open("Parrots.bmp")
# 画像を拡大/縮小する
img_resize = img.resize((64, 64))
# 切り抜いた画像の保存
img_resize.save("Parrots_resize.bmp")
(実行結果)
元画像 | 縮小画像 |
resample(補間方法)について
resampleの設定は、主に画像を拡大するときに画像の画素と画素の間の輝度値を求める事になるのですが、この時の求め方の方法を指定します。
この画素間の輝度値を求める方法は一般に補間と言いますが、補間については、下記のページを参照ください。
画素の補間(Nearest neighbor,Bilinear,Bicubic)の計算方法
画像を拡大や回転する場合など、画像の画素と画素の間の輝度値を参照する必要が出てきますが、その参照方法を紹介します。 この画素を画素の間を参照する事を一般に補間や内挿(Interpolation)と言います。 最近傍補間(ニアレストネイバー ...
Pillowでは、補間方法にImage.NEAREST, Image.BOX, Image.BILINEAR, Image.HAMMING, Image.BICUBIC, Image.LANCZOSの方法を指定する事ができますが、
NEAREST→BOX→BILINEAR→HAMMING→BICUBIC→LANCZOS
の順で、キレイにリサイズすることができますが、処理時間は逆に遅くなるため、用途に応じてresampleの設定を行ってください。
個人的には、画像処理後の1画素1画素の輝度値を見せたいときはNEAREST、とりあえずのBILINEARという使い分けが多いです。
下図のように部分的に画像を拡大したときに、resampleの設定を変えると、どのようになるか?見てみたいと思います。
NEAREST | BOX | BILINEAR |
HAMMING | BICUBIC | LANCZOS |
拡大の時のキレイさは、NEAREST, BOX → HAMMING → BILEAR → BICUBIC → LANCZOS の順ですかね?
参考
Image Module
The Image module provides a class with the same name which is used to represent a PIL image. The module also provides a ...
Concepts
The Python Imaging Library handles raster images; that is, rectangles of pixel data. Bands: An image can consist of one ...
コメント