アフィン変換後の座標から元の画像での位置を求める
アフィン変換(cv2.warpAffine)後に切り出した画像が元の画像に収まっているか調べたい。
切り出した画像の四隅の座標が、元の画像の中にあればいいはず
考え方
warpAffineに渡したマトリクスを見てみると(2×3)の行列になっている
これに[0, 0, 1]の行を加えて、転置すれば最初に使用した回転行列が得られそう
アフィン変換後の座標を(x, y)とすると、[x, y, 1]に回転行列の逆行列をかける回転行列の逆行列に[[x], [y], [1]](3×1)をかけると元の座標が得られる気がする
OpenCVに対応するメソッドがあるんじゃないかとは思うが、探すのが面倒くさいどれを使えばいいのか、どう使えばいいのかわからない
コード
inverseWarpAffine.py
import cv2
import numpy as np
def getOriginalPosition(p, M):
origin = np.array([[p.x], [p.y], [1]])
rotateM = np.array([M[0], M[1], [0, 0, 1]])
invM = np.linalg.inv(rotateM.T)
return np.dot(invM, origin)[:2, 0]