还是flann呢?我不是最有经验的程序员,我也可能只是忽略了一些非常基本的东西(c++,OpenCV 2.4.3.)
问题:
我有两个点云,想要计算一个位移图。我试图使用flann .lib从第二个云的点获得第一个云中点的最近邻居,并使用它们和距离来计算位移向量(s)。
目前我得到的是:
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));
就我所知,它可以工作,我得到了距离,我得到了查询点,我得到了索引。但是我如何从索引中得到与查询点匹配的实际点呢?
我浏览了flan .hpp,但没有找到任何提示。我乱搞了一下MyIndex, NN_Index和索引,但没有得到任何有用的结果。
Try
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;
}