【问题标题】:Calculating new positions of keypoints计算关键点的新位置
【发布时间】:2014-04-23 18:00:50
【问题描述】:

有人可以帮我,我们如何计算转换图像中关键点的新位置,关键点是在原始图像中检测到的。我正在使用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);
...
}

现在我想计算结果1图像中points2的新位置。

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

更新:opencv 'perspectiveTransform' 做了我想做的事。

【问题讨论】:

  • 这是一个关于数学和变换的问题;不是关于编程......
  • @Chris Maes,计算机视觉是关于编程数学变换
  • 好吧,你说得有道理,我的评论可能不够清楚。但这个问题显然是一个“如何做我的数学”问题,而不是一个程序问题,不是吗?
  • @ChrisMaes ,感谢您的评论,我真的不知道该怎么做,这就是我问的原因。我不认为向知道这件事的人询问有什么问题。
  • @MMH 我不想变得粗鲁。我理解您的问题,但您最好粘贴 5 行代码,说明如何包装图像以及卡在哪里;这更容易回答......我的意见也许

标签: c++ c opencv homography warp


【解决方案1】:

我们将使用单应性H扭曲图像I获得的图像称为I'

如果您在原始图像中提取了关键点 mi = (xi, yi, 1) I,您可以使用单应变换得到扭曲图像I'中的关键点m'i:S * m'i = H * mi。注意比例因子 S,如果您想要以像素为单位的关键点坐标,您 必须 缩放 m'i 以便第三个元素为 1 .

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

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

【讨论】:

  • 嗨,Aldur,谢谢,关键点是在 I 中提取的,而不是在 I' 中,我想在 I' 中重新计算它。我认为它可以以同样的方式计算。谢谢
  • @MMH 我更新了我的答案。不过,您的问题表明您希望关键点坐标 转换之前...下次尝试更清楚地描述您的问题;)
  • @MMH 好的,我更新了我的答案,提到了 OpenCV 函数 perspectiveTransform,这正是你想要的。
  • 谢谢,perspectiveTransform 完美运行,正是我想要的。谢谢。
  • @AldurDisciple 这个答案正是我想要的。有什么地方我可以去看看一个例子吗?我想我理解数学,但把它付诸实践对我来说有点多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多