use*_*734 3 c++ opencv transformation matrix computer-vision
我正在尝试使用逆透视图进行一些图像分析.我使用openCV函数getTransform和findHomography生成转换矩阵并将其应用于源图像.这很好用,我可以从我想要的图像中获取点数.问题是,我不知道如何获取单个点值并撤消转换以将它们绘制回原始图片.我想只撤消这组点的变换以找到它们的原始位置.怎么做到这一点.这些点的形式为openCV库中的Point(x,y)形式.
要反转单应性(例如透视变换),通常只需反转变换矩阵.
因此,要将某些点从目标图像转换回源图像,请反转变换矩阵并使用结果转换这些点.要使用变换矩阵变换点,您可以将其从右侧乘以矩阵,然后可以进行去均匀化.
幸运的是,OpenCV不仅提供了warpAffine/warpPerspective方法,它们将一个图像的每个像素转换为另一个图像,但也有转换单个点的方法.
使用cv::perspectiveTransform(inputVector, emptyOutputVector, yourTransformation)方法转换一组点,其中
inputVector是std::vector<cv::Point2f>(你也可以使用nx2或2xn矩阵,但有时这是错误的).相反,你可以使用cv :: Point3f类型,但我不确定那些是三维转换的同质坐标点还是3D点(或者两者都是?).
outputVector是一个空std::vector<cv::Point2f>的结果将被存储
yourTransformation是一个双精度3x3 cv :: Mat(由提供者提供findHomography)变换矩阵(或4x4用于3D点).
小智 6
这是一个 Python 示例:
import cv2
import numpy as np
# Forward transform
point_transformed = cv2.perspectiveTransform(point_original, trans)
# Reverse transform
inv_trans = np.linalg.pinv(trans)
round_tripped = cv2.perspectiveTransform(point_transformed, inv_trans)
# Now, round_tripped should be approximately equal to point_original
Run Code Online (Sandbox Code Playgroud)