“cv.findHomography”的解释`

2024-10-08 22:27:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用opencv查找两组点之间的单应性。我有源src和目标dst,我正在计算下面的单应Ha

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)给出了{}

但是,如果我仔细看一下这两个数组,下面是我所拥有的

The top is H@src and bottom is dst

这两组值之间有明确的对应关系。如果不是最后一排的话,我几乎可以放心地说,它们只是按比例因子缩小了。显然,比例因子为零没有意义。我错过了什么


Tags: importsrc目标nparraycv2opencv比例
1条回答
网友
1楼 · 发布于 2024-10-08 22:27:54

由于3x3单应矩阵计算两个空间之间的2D点集之间的变换,因此dst的最后一个分量中有0将是一个问题。 这是因为srcdst必须是齐次表示中的一组二维点。因此,拥有0将使这些点无穷大

也许你正在寻找这样的东西:

&13; 第13部分,;
import cv2
import numpy as np

if __name__ == '__main__':
    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],
                    [1, 1, 1, 1, 1]])  # converting to homogeneous coordinates

    H, _ = cv2.findHomography(src.T, dst.T)
    dst_est = H @ src
    print(np.allclose(dst_est / (dst_est[2, :]), dst / dst[2, :], atol=1e-2))  # dividing by last component to fix the scaling and adjusting the tolerance
和#13;
和#13;

相关问题 更多 >

    热门问题