opencv cv2.findHomography 单应性矩阵理解
单应性矩阵H获得
单应性矩阵是一个3*3的矩阵,可以从cv2.findHomography获得
例如:
H, status = cv2.findHomography(ptsA, ptsB, cv2.RANSAC, 5)
ptsA, ptsB对应两幅图获得的sift或者surf特征点,这里不细讲
参考:https://www.cnblogs.com/lzq116/p/11836657.html
单应性矩阵分析
cv2.findHomography得到的H是图一到图二的单应性矩阵
如果需要图二到图一的单应性矩阵,则求逆:np.linalg.inv(H)
上图仅作参考,得到得的H和上面图中得不太一样
(原因:opencv坐标原点是左上角,上图坐标原点是左下角)
以下图为例介绍
下面介绍一下opencv坐标系下应该是这样的
然后H矩阵的所有变换操作都是基于上图opencv坐标
其中theta顺时针为正
上面的H矩阵可以看成先旋转再平移
坐标单应性变换计算
计算不用人工算,仿着下面写就行
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)
注意:每个坐标外面两层中括号,不然会报错。
上面是图一到图二的坐标变换
如果需要图二到图一的单应性矩阵,则求逆:np.linalg.inv(h)