画像処理ライブラリOpenCVで画像の射影変換を行うwarpPerspectiveについて説明する。
射影変換は任意の形の四角形から別の形の四角形への変形で、台形を長方形に変換する場合などに用いる。
OpenCVを使うには次のようにインポートが必要。
import cv2
例に用いる画像'poster.jpg'(幅600x高さ450ピクセル)は以下を使用(フリー写真素材ぱくたそより)
1. 書式
cv2.warpPerspectiveの書式は以下の通り。
dst = cv2.warpPerspective(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]])
引数 | 意味 |
---|---|
dst | 変換後の画像 |
src | 元画像 |
M | 3x3の変換行列 |
dsize | 変換後の画像サイズ。(幅, 高さ)のタプルで指定 |
flags | interpolation(補完方法)の指定など |
2. getPerspectiveTransformを用いた変換行列の生成
変換行列Mを生成するためにはgetPerspectiveTransformを用いる。変換前の座標4点と変換後の座標4点をそれぞれ二次元ndarryで与えることで変換行列が生成される。
例の画像に対して
返還前の座標4点[88, 45], [230, 110], [100, 420], [233, 333]から
返還前の座標4点[100,100], [400,100], [100,400], [400,400]へ変換する例。
import cv2 import numpy as np img = cv2.imread('poster.jpg') rows,cols,ch = img.shape pts1 = np.float32([[88, 45], [230, 110], [100, 420], [233, 333]]) pts2 = np.float32([[100,100], [400,100], [100,400], [400,400]]) M = cv2.getPerspectiveTransform(pts1, pts2) dst = cv2.warpPerspective(img, M, (cols, rows)) cv2.imwrite('warpPerspective.jpg', dst)
実行結果
変換前、返還後の座標4点をそれぞれの画像に図示すると以下の通り。斜めから見たポスターを正面から見た像に変換できる。
変換前
変換後
3. リファレンス
OpenCV > Geometric Image Transformations > warpPerspective()
OpenCV > Geometric Image Transformations > getPerspectiveTransform()
使用したバージョン:Python 3.8.8 / OpenCV 4.0.1
0 件のコメント:
コメントを投稿