我正在尝试使用opencv查找两组点之间的单应性。我有源src
和目标dst
,我正在计算下面的单应H
a
import numpy as np
import cv2
src = np.array([[-47.59, -57.43, 139.59, 149.43, 46.],
[141.43, 31.03, -1.43, 108.97, 70.],
[579.23, 412.75, 422.55, 589.03, 500.89]])
dst = np.array([[-100, -100, 100, 100, 0],
[-100, 100, 100, -100, 0],
[0, 0, 0, 0, 0]])
H, _ = cv2.findHomography(src.T, dst.T)
print(np.allclose(H@src, dst))
OpenCV正在计算单应性,但当我尝试使用计算的H
恢复原始dst
时,它不起作用np.allclose(H@src, dst)
给出了{
但是,如果我仔细看一下这两个数组,下面是我所拥有的
这两组值之间有明确的对应关系。如果不是最后一排的话,我几乎可以放心地说,它们只是按比例因子缩小了。显然,比例因子为零没有意义。我错过了什么
由于3x3单应矩阵计算两个空间之间的2D点集之间的变换,因此
dst
的最后一个分量中有0将是一个问题。 这是因为src
和dst
必须是齐次表示中的一组二维点。因此,拥有0将使这些点无穷大也许你正在寻找这样的东西: