transform()メソッドでアフィン変換を行う方法はここ↓で紹介しました。
このページでも説明しているように method に PIL.Image.PERSPECTIVE を指定し、data の部分にホモグラフィ変換行列を指定すれば、射影変換(ホモグラフィ変換)を行う事ができるのですが、ホモグラフィ変換行列を求めるのが少々難しいので、射影変換後の形状が長方形でいいのであれば、method に PIL.Image.QUAD を指定することで、簡単に射影変換を行う事が可能になります。
(サンプルプログラム)
from PIL import Image # 画像データ用
# PIL.Imageで画像を開く
src = Image.open("./buisiness_card.jpg")
quad_data = (
57, 174, # 左上
41, 418, # 左下
580, 252, # 右下
488, 13 # 右上
)
# 4点からなる四角形を幅、高さからなる長方形へ変換
dst = src.transform(
(320, 240), # 出力サイズ(幅, 高さ)
Image.QUAD, # 変換方法
quad_data, # 四角を構成する4点の座標
Image.BICUBIC # 補間方法
)
# OS標準の画像ビューアで表示
src.show() # 元画像
dst.show() # 変換画像
(実行結果)
PIL.Image.QUAD では4点の座標からなる四角形を (幅, 高さ)で指定した長方形へ変換します。
4点の座標は下図のように、四角形の角の点を 左上、左下、右下、右上 の順で指定します。
射影変換では、変換後の形状を長方形にする場合が多いかと思いますので、長方形でいいのなら、とても簡単!!