如何使用opencv flannbasedmatcher和dmatch访问对应于最佳关键点匹配的最佳图像

如何使用opencv flannbasedmatcher和dmatch访问对应于最佳关键点匹配的最佳图像,opencv,computer-vision,Opencv,Computer Vision,关于之前提出的问题,我有一个后续问题: 特别是关于答案的这一部分: /* for kk=1 to matches.size() the best match for queryKeypoints[matches[kk].queryIdx].pt is dbKeypoints[matches[kk].imgIdx][matches[kk].trainIdx].pt */ 我的问题是:是否可以使用opencv的flannbasedmatcher match()函

关于之前提出的问题,我有一个后续问题:

特别是关于答案的这一部分:

/* for kk=1 to matches.size()

       the best match for queryKeypoints[matches[kk].queryIdx].pt 
       is dbKeypoints[matches[kk].imgIdx][matches[kk].trainIdx].pt
 */
我的问题是:是否可以使用opencv的flannbasedmatcher match()函数和dmatch结构访问找到最佳匹配关键点(最短距离)的图像,如果可以,如何进行

具体来说,在将查询图像与一组图像进行比较时,如何做到这一点?在这种情况下,flann k-d树是否构建时所有关键点都混合在一起(那么相应的图像标签没有与树中的关键点一起附着)?或者有没有办法访问给定关键点所属的图像

关于flannbasedmatcher matcher match()和train()函数如何工作的任何其他指示也将非常有用,因为我已经浏览了源代码,仍然有些困惑——谢谢


非常感谢您的指导,谢谢

Dmatch属性imgIdx报告匹配关键点所属的“列车”图像的索引。使用描述符:将描述符向量附加到“训练”图像描述符向量。这取决于您是否知道图像id X对应于特定的图像文件

非常感谢您的回复。我已经创建了一个TrainDescriptor向量,为我的每个训练图像在这个向量中添加了一个cv::Mat描述符。令我惊讶的是,如果我的训练描述符向量中有3个条目(3个训练图像的3个描述符集),我有时仍然会得到5的imgIdx值(或者一些这样的数字大于我的训练图像数量)。这是预期的吗?对于3图像描述符大小,我希望imgIdx不大于2(0、1或2)。我感谢您的建议。更具体地说,我使用以下函数:“void DescriptorMatcher::match(const Mat&queryDescriptors,vector&matches,const vector&masks)”来匹配一个查询图像和一个图像集。然后检索“matches.at(0).imgIdx”(matches.at(0)应该是最佳(最短距离)匹配关键点,所以imgIdx应该告诉我这个最佳关键点来自的最佳cv::Mat trainDescriptor索引,等于我原始图像向量的最佳图像索引,对吧?但是我得到的imgIdx比我原始的trainDescriptor数量要多。