计算关键点的新位置

时间:2014-03-18 07:30:13

标签: c++ c opencv homography warp

有人可以帮助我,我们如何计算变换图像中关键点的新位置,在原始图像中检测到关键点。我正在使用opencv单应矩阵和warpPerspective来制作转换后的图像。

这是一个代码..

...
 std::vector< Point2f > points1,points2;
 for( int i = 0; i < matches1.size(); i++ )
    {
     points1.push_back( keypoints_input1[matches1[i].queryIdx ].pt );
     points2.push_back( keypoints_input2[matches1[i].trainIdx ].pt );
    }
 /* Find the Homography Matrix for current and next frame*/
 Mat H1 = findHomography( points2, points1, CV_RANSAC );
 /* Use the Homography Matrix to warp the images*/
cv::Mat result1;
warpPerspective(input2, result1, H1, Size(input2.cols+150, input2.rows+150),              
INTER_CUBIC);
...
}

现在我想计算result1图像中points2的新位置。

例如,在下面的转换图像中,我们知道角点。现在我想计算关键点在变换{(x1,y1),(x2,y2),(x3,y3)...}之前的新位置,我们如何计算它?

更新:opencv&#39; perspectiveTransform&#39;做我想做的事。

1 个答案:

答案 0 :(得分:2)

让我们通过使用单应性I'来扭曲图像I来获取H图像。

如果您在原始图像中提取关键点 m i =(x i ,y i ,1) I,您可以使用单应变换在变形图像I'中获取关键点 m&#39; i :S * m& #39; i = H * m i 。注意比例因子S,如果你想要关键点坐标(以像素为单位),你 来缩放 m&#39; i 以便第三个元素是1。

如果您想了解比例因子的来源,请查看Homogeneous Coordinates

此外,还有一个OpenCV函数可将此转换应用于点数组:perspectiveTransformdocumentation)。