C++ C++/OpenCV-使用flann::index后如何获取图像?(带转炉)

C++ C++/OpenCV-使用flann::index后如何获取图像?(带转炉),c++,opencv,matching,flann,C++,Opencv,Matching,Flann,我使用BoW和SURF以及FlannBasedMatcher在数据库中进行图像检索。 我使用SURF提取了数据库(训练)中的所有特征,然后构建词汇表,最后得到数据库(训练)中每个图片的BOF频率直方图 说清楚一点,我没有把整个过程的细节都说出来,但是如果你需要一些细节,请告诉我 因此,在这一步中,我有: cv::Mat all描述符-->我的all数据库的描述符(培训) cv::Mat词汇表-->码本表示法 cv::Mat responseDatabase-->我的数据库中每个图片的频率直方图

我使用BoW和SURF以及FlannBasedMatcher在数据库中进行图像检索。 我使用SURF提取了数据库(训练)中的所有特征,然后构建词汇表,最后得到数据库(训练)中每个图片的BOF频率直方图

说清楚一点,我没有把整个过程的细节都说出来,但是如果你需要一些细节,请告诉我

因此,在这一步中,我有:

  • cv::Mat all描述符-->我的all数据库的描述符(培训)

  • cv::Mat词汇表-->码本表示法

  • cv::Mat responseDatabase-->我的数据库中每个图片的频率直方图

然后我使用了一个查询,并根据前面计算的词汇表计算其响应。 最后,我有以下数据:

  • cv::Mat responseQuery-->我的查询的频率直方图
现在我遇到了一些困难。 我曾经

它运行良好,我得到了以下结果:

  • cv::Mat结果-->[38117] -
  • cv::Mat dist-->[0.0010655867,0.013091294]
但是现在有了这些结果,我如何恢复与我的两个最近邻居对应的两张图片? 事实上,我的每个数据中都没有任何图片的痕迹

也许,我错过了一步,但哪一步呢


谢谢

我解决了这个问题,但我不知道这是不是最好的办法

计算每个图像后,如下所示:

bowide.compute(img,keypoints,responseHist);
我将图片保存在一个大矢量中,因此,我可以加载它们进行匹配

  vectorImg.push_back(img);
问题是,我必须将每张图片的名称保存在txt文件中,然后在匹配过程中读取txt文件。(以便加载它们)
实际上,数据库中每个图像的BoWFeature的计算只进行了一次,我不想每次都运行相同的过程,我想将查询与数据库进行比较。因此,一旦我的数据库经过训练,我只能进行匹配,因为我在一个txt文件中有我所有的图片和一个索引。

responseQuery是如何初始化的?需要更多的代码。无论如何,我猜结果中的索引应该以某种方式与图像数据库索引匹配,如果不完全匹配的话。因此,图像38应该是最接近您的查询点的匹配。
  vectorImg.push_back(img);