To invert a homography (e.g. perspective transformation) you typically just invert the transformation matrix.
So to transform some points back from your destination image to your source image you invert the transformation matrix and transform those points with the result. To transform a point with a transformation matrix you multiply it from right to the matrix, maybe followed by a de-homogenization.
Luckily, OpenCV provides not only the warpAffine/warpPerspective methods, which transform each pixel of one image to the other image, but there is method to transform single points, too.
Use cv::perspectiveTransform(inputVector, emptyOutputVector, yourTransformation)
method to transform a set of points, where
inputVector
is a std::vector<cv::Point2f>
(you can use a nx2 or 2xn matrix, too, but sometimes that's erroneous). Instead you can use cv::Point3f type, but I'm not sure whether those would be homgeneous coordinate points or 3D points for 3D transformation (or maybe both?).
outputVector
is an empty std::vector<cv::Point2f>
where the result will be stored
yourTransformation
is a double precision 3x3 cv::Mat (like provided by findHomography
) transformation matrix (or 4x4 for 3D points).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…