如何访问cv :: flann knnsearch找到的最近邻居?

时间:2013-06-12 15:56:37

标签: opencv knn flann

或者甚至可以使用flann?我不是最有经验的编码器,我也可能只是忽略了一些非常基本的东西(C ++,OpenCV 2.4.3。)

问题:

我有两个pointcloud并且想要计算位移图。我正在尝试使用flann .lib从第二个云的点获取第一个云中一个点的最近邻居,并使用它们和距离来计算位移矢量。

到目前为止我得到的是:

int nn = 1;
cv::Mat MyIndex(data1.size(),3,CV_64FC1);
cv::Mat MyQuery(data2.size(),3,CV_64FC1);
cv::Mat indices(data2.size(),1,CV_32SC1);
cv::Mat distances(data2.size(),3,CV_64FC1);

cv::flann::Index_<double> NN_Index(MyIndex, cvflann::KDTreeIndexParams(4));
NN_Index.knnsearch(MyQuery,indices,distances,nn,cvflann::SearchParams(32));

据我所知,我得到了距离,我得到了查询点,我得到了索引。但是如何从索引中获得与我的查询点匹配的实际点?

我查看了flann.hpp,但实际上找不到任何提示。我用MyIndex,NN_Index和索引搞砸了一下,但没有得到任何有用的结果。

1 个答案:

答案 0 :(得分:0)

尝试

for (int queryIdx = 0; queryIdx < MyQuery.rows; ++queryIdx) {
  int dbIdx = indices.at<int>(queryIdx, 0);
  std::cout<<"Query Idx:"<<queryIdx<<" matched to "<<"Database Idx:"<<dbIdx<<std::endl;
}