处理DMatch向量,访问数据Opencv

时间:2012-02-20 15:50:52

标签: image opencv matching surf feature-descriptor

我已经计算了描述符,但是现在,我希望在将其从关键点转换为浮点数之前清除异常值。

我知道这可以通过

自动完成
BruteForceMatcher<cv::L2<float> > matcher;

std::vector<cv::DMatch> matches;


matcher.match(descriptors1,descriptors2, matches);
std::nth_element(matches.begin(),matches.begin()+24, matches.end());
matches.erase(matches.begin()+25, matches.end());`

但这仅在下一步绘制匹配时才有用,实际上我想要做的是在一些图像注册中获得最佳的25次匹配处理。

任何帮助都会有用。感谢

伊万

1 个答案:

答案 0 :(得分:-1)

使用Dmatch向量中每个元素的trainIdx和queryIdx属性从您提供的关键点向量中提取相应的匹配索引。

基本上,matches.at(i).trainIdx和matches.at(i).queryIdx将为您提供'i'对应匹配的索引。最好的部分是,匹配按质量的降序排列,因为,i = 1将是比i = 3更好的匹配,依此类推。因此,在您的代码中,您将提取最佳的24场比赛。

我不知道你是否仍然需要这个问题的帮助,这是你问过它已经一年了。但我有同样的问题,我偶然发现了你的问题。我花了很多时间才弄明白。我认为我有责任回答这个问题,以免其他人也有机会遇到同样的问题并需要帮助。让光明亮起来!