image - 处理DMatch向量,访问数据Opencv

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

我知道这可以通过以下方式自动完成

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());`

但这仅在下一步是绘制匹配项时才有用,而实际上我想做的就是在某些图像配准 Material 中为posprocessing获得最佳的25个匹配项。

任何帮助将是有用的。谢谢

伊万

最佳答案

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

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

我不知道您是否仍需要此问题的帮助,距您提出问题已经一年了。但是我有同样的问题,碰巧遇到了你的问题。我也花了时间去弄清楚。我认为回答这个问题是我的责任,以免其他人也遇到同样的问题并需要帮助。让它发光!

https://stackoverflow.com/questions/9364018/

相关文章:

opencv - 如何删除 OpenCV FileStorage 对象中的文件节点

opencv - 使用JavaCV开发我们需要安装什么?

python - OpenCV 3.0缺少诸如drawMatches和drawMatchesKNN的

xcode4 - OpenCV,调用contourArea导致getMat中的断言失败

qt - Qt试图包括openCV库文件

opencv - 如何从gpuHog获取描述符?

image - 2幅图像之间的联合直方图

python - 使用OpenCV人脸检测时出错

matlab - 检测网格方向和属性

opencv - SiftFeatureDetector .detect函数损坏?