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

标签 opencv knn flann

还是用flann可能?我不是最有经验的编码员,我可能也只是忽略了一些基本的东西(C++,OpenCV 2.4.3)。

问题 :

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

到目前为止,我得到的是:

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和索引弄乱了一点,但是没有得到任何有用的结果。

最佳答案

尝试

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;
}

关于opencv - 如何访问cv::flann knnsearch找到的最近的邻居?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17070057/

相关文章:

c++ - On_actionCapture_triggered 没有匹配信号

python - np.linalg.norm(a-b) 和 np.sqrt(np.sum(np.square(a-b))) 之间的区别?

python-2.7 - OpenCV 3.2 名称错误 : global name 'FLANN_INDEX_LSH' is not defined

c++ - PCL 1.8.0 项目的链接器错误

python - 如何跟踪极慢的物体

java OpenCV 找到 k 最近邻 c++ 到 java 的转换

解决两个现实生活问题的算法

c++ - Opencv Flannbasedmatcher

python - 如何在 Python cv2 上使用 opencv 'superres' 包?

algorithm - 了解 MATLAB 中的 knn 算法(分类)