如何使用暴力匹配/SIFT描述符获取匹配点的位置

4

我尝试使用BF-matcher来匹配我的SIFT-Keypoints。之前我的操作方式类似这个

但是如果我想要用print(good)获取x、y位置,它只会给我像这样的结果:

DMatch 000001DD9C4E0EB0

我应该如何把它转换成位置?

1个回答

14

由于您没有提供代码,我根据教程中的代码回答您的问题。基本上,关键点是SIFT算法检测到的具有旋转、缩放和x、y位置的点,而描述符只是用于匹配它们的特征向量。在matches变量中,您有一组描述符之间的匹配(DMatch)。关键点位于kp1和kp2中。要找到两个匹配的点(p1,p2),请使用以下代码:

for match in matches:
  p1 = kp1[match.queryIdx].pt
  p2 = kp2[match.trainIdx].pt

这是与教程中相同的代码(使用SIFT描述符和比率测试进行暴力匹配),但当我添加您的代码时,它显示“AttributeError:'list' object has no attribute 'queryIdx'”。 - hajo
@hajo,请确保您在匹配中添加的是“m”,而不是“[m]”。如果您添加的是[m],请改为使用kp1 [match [0] .queryIdx] .pt - Radwa Khattab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接