opencv cv2.findHomography 單應(yīng)性矩陣?yán)斫?/h1>
單應(yīng)性矩陣H獲得
單應(yīng)性矩陣是一個3*3的矩陣,可以從cv2.findHomography獲得
例如:
H, status = cv2.findHomography(ptsA, ptsB, cv2.RANSAC, 5)
ptsA, ptsB對應(yīng)兩幅圖獲得的sift或者surf特征點,這里不細(xì)講
參考:https://www.cnblogs.com/lzq116/p/11836657.html
單應(yīng)性矩陣分析
cv2.findHomography得到的H是圖一到圖二的單應(yīng)性矩陣
如果需要圖二到圖一的單應(yīng)性矩陣,則求逆:np.linalg.inv(H)

image.png
上圖僅作參考,得到得的H和上面圖中得不太一樣
(原因:opencv坐標(biāo)原點是左上角,上圖坐標(biāo)原點是左下角)
以下圖為例介紹

image.png
下面介紹一下opencv坐標(biāo)系下應(yīng)該是這樣的

image.png
然后H矩陣的所有變換操作都是基于上圖opencv坐標(biāo)

image.png
其中theta順時針為正
上面的H矩陣可以看成先旋轉(zhuǎn)再平移
坐標(biāo)單應(yīng)性變換計算
計算不用人工算,仿著下面寫就行
h = np.array([[1.0, 0.0, 0.0],
[0.0, 1.0, 0.0],
[0.0, 0.0, 1.0]])
coordinate = np.array([[[0, 0]],[[100,100]]).astype('float64')
new_coordinate = cv2.perspectiveTransform(coordinate, h).astype(np.int)
print(new_coordinate)
注意:每個坐標(biāo)外面兩層中括號,不然會報錯。
上面是圖一到圖二的坐標(biāo)變換
如果需要圖二到圖一的單應(yīng)性矩陣,則求逆:np.linalg.inv(h)