有人可以帮助我,如何计算转换后图像中关键点的新位置,这些关键点是在原始图像中检测到的。我正在使用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'perspectiveTransform'做我想做的。
最佳答案
我们将I'
称为通过使用单应性I
扭曲图像H
而获得的图像。
如果您在原始图像I
中提取了关键点 mi =(xi,yi,1),则可以使用单应性转换在变形图像I'
中获得关键点 m'i :S * m'i = H * mi 。注意比例因子S,如果要关键点的坐标以像素为单位,则必须缩放 m'i ,以便第三个元素为1。
如果您想了解比例因子的来源,请查看Homogeneous Coordinates。
另外,还有一个OpenCV函数可将此转换应用于点数组:perspectiveTransform
(documentation)。
关于c++ - 计算关键点的新位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22472871/