反单应性

Pav*_*ane 5 c++ opencv projection homography perspective

我使用findHomography函数获得H矩阵。

H = findHomography(points_src, points_dst);
Run Code Online (Sandbox Code Playgroud)

然后,将H与warpPerspective一起使用以获取图像的透视投影

warpPerspective(im_src, im_dst, H, Size(100, 100));
Run Code Online (Sandbox Code Playgroud)

从这里我得到了一些兴趣点

vector<Point2f> points = some_function(im_dst)
Run Code Online (Sandbox Code Playgroud)

现在,我只想让“点”集返回到原始图像,这样,我现在就可以将原始图像中的关注点集还原。

对于此任务,我猜想我需要再次使用warpPerspective和标志WARP_INVERSE_MAP,但这不起作用。

Del*_*gan 17

您确实可以findHomography()再次使用,但由于这种矩阵组合属性,反转变换的一种更优雅、准确和快速的方法是简单地反转单应矩阵

这是一个使用 Python 的小演示:

import cv2
import numpy as np

source = np.float32([[0, 0], [100, 0], [100, 100], [0, 100]])
dest = np.float32([[0, 0], [-1000, 0], [-1000, -1000], [0, -1000]])

points = np.float32([[[50, 50]]])

homography, _ = cv2.findHomography(source, dest)

transformed = cv2.perspectiveTransform(points, homography)

print(transformed)
# => [[[-500. -500.]]]

homography_inverse = np.linalg.inv(homography)

detransformed = cv2.perspectiveTransform(transformed, homography_inverse)

print(detransformed)
# => [[[50. 50.]]]
Run Code Online (Sandbox Code Playgroud)

  • cv 还具有矩阵求逆的内置函数:`cv::Mat::inv`。 (2认同)

cer*_*rou 7

要找到逆单应性,只需切换points_dstpoints_src

H_inv= findHomography(points_dst, points_src);
Run Code Online (Sandbox Code Playgroud)

然后,如果将 应用H_inv到由 转换的点H,您将获得原始点。