画像処理ライブラリ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 件のコメント:
コメントを投稿