transform()メソッドでアフィン変換を行う方法はここ↓で紹介しました。
【Python/Pillow(PIL)】transformメソッドでアフィン変換
「Python アフィン変換」と検索すると、OpenCVを使った説明が多いような気がしますが、画像を表示するだけなら、Pillowにtransform()メソッドというのがあり、これもなかなか高機能な処理が可能になります。 Pillowなら...
このページでも説明しているように 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点の座標は下図のように、四角形の角の点を 左上、左下、右下、右上 の順で指定します。
射影変換では、変換後の形状を長方形にする場合が多いかと思いますので、長方形でいいのなら、とても簡単!!
参考記事
【Python/Pillow(PIL)】transformメソッドでアフィン変換
「Python アフィン変換」と検索すると、OpenCVを使った説明が多いような気がしますが、画像を表示するだけなら、Pillowにtransform()メソッドというのがあり、これもなかなか高機能な処理が可能になります。 Pillowなら...
【Python/NumPy】座標からホモグラフィ変換行列を求める方法
アフィン変換では長方形を平行四辺形には変換できるものの、台形には変換できないと説明しましたが、任意四角形から任意四角形へ変換できるのがホモグラフィ変換となります。 実際には書類や名刺のような長方形の被写体を斜めから撮影した時に、上から撮影し...
コメント