我已经计算了描述符,但是现在,在将其从关键点转换为浮点数之前,我想清除异常值。
我知道这可以通过以下方式自动完成
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());`
最佳答案
使用Dmatch vector 中每个元素的trainIdx和queryIdx属性从您提供的关键点 vector 中提取匹配的对应索引。
基本上,matches.at(i).trainIdx和matches.at(i).queryIdx将为您提供第i个对应匹配项的索引。最好的部分是,匹配按质量降序排列,例如,i = 1比i = 3更好,依此类推。因此,在您的代码中,您正在提取最佳的24个匹配项。
我不知道您是否仍需要此问题的帮助,距您提出问题已经一年了。但是我有同样的问题,碰巧遇到了你的问题。我也花了时间去弄清楚。我认为回答这个问题是我的责任,以免其他人也遇到同样的问题并需要帮助。让它发光!
https://stackoverflow.com/questions/9364018/