C++ 计算关键点的新位置
有人能帮我吗,我们如何计算关键点在变换图像中的新位置,关键点是在原始图像中检测到的。我使用opencv单应矩阵和透视图来生成变换后的图像 这是一个密码C++ 计算关键点的新位置,c++,c,opencv,homography,warp,C++,C,Opencv,Homography,Warp,有人能帮我吗,我们如何计算关键点在变换图像中的新位置,关键点是在原始图像中检测到的。我使用opencv单应矩阵和透视图来生成变换后的图像 这是一个密码 ... std::vector< Point2f > points1,points2; for( int i = 0; i < matches1.size(); i++ ) { points1.push_back( keypoints_input1[matches1[i].queryIdx ].pt );
...
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);
...
}
。。。
std::vectorpoints1,points2;
对于(int i=0;i
现在我想计算结果1图像中点2的新位置
例如,在下面的变换图像中,我们知道角点。现在我想计算关键点的新位置,比如在变换{(x1,y1),(x2,y2),(x3,y3)…}之前,我们如何计算它
更新:opencv“透视变换”完成了我试图做的事情。让我们调用
I'
通过使用单应H
扭曲图像I
获得的图像
如果在原始图像I
中提取关键点mi=(xi,yi,1),则可以使用单应变换在扭曲图像I'
中获得关键点mi:S*mi=H*mi。请注意比例因子S,如果希望关键点坐标以像素为单位,则必须缩放m'i,以便第三个元素为1
如果您想了解比例因子的来源,请查看
此外,还有一个OpenCV函数可以将此转换应用于一组点:
透视转换
()。这是一个关于数学和转换的问题;不是关于编程…@Chris Maes,计算机视觉是关于编程数学转换的。所以你有一点,我的评论可能不够清楚。但是这个问题显然是一个“如何做我的数学”的问题,而不是一个程序性的问题,不是吗?@ChrisMaes,谢谢你的评论,我真的不知道,如何做,这就是我为什么要问的。我不认为问知道此事的人有什么不对。@MMH我不想粗鲁。我理解你的问题,但你最好粘贴5行代码,说明你如何包装你的图像以及你到底被卡在哪里;这是一个更容易回答的问题。。。我的意见可能是:谢谢,关键点是在I中提取的,而不是在I'中,我想在I'中重新计算它。我想可以用同样的方法计算。thanks@MMH我更新了我的答案。不过,您的问题表明,在转换之前需要关键点坐标。。。下次试着更清楚地描述你的问题;)@嗯,好的,我更新了我的答案,提到了OpenCV函数透视变换
,它正是你想要的。谢谢,透视变换工作得很好,这正是我想要的。谢谢你。@AldurDisciple这个答案正是我想要的。有什么地方我可以去看一个例子吗?我想我懂数学,但把它付诸实践对我来说有点难。