pcl kdtree的indices的第一项是自己,因为自己离自己最近.
如果项目中要选用离自己最近的10个点,应该从indices的第二项开始取,取到第11项也就是下角标1-10
void kdtree_test() {
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
for (int i = 0; i < 100; i++) {
cloud->emplace_back(i, 0, 0);
}
pcl::KdTreeFLANN<pcl::PointXYZ> kdtree;
kdtree.setInputCloud(cloud);
std::vector<int> indices(10);
std::vector<float> distance(10);
pcl::PointXYZ test;
test = cloud->points[0];
if (kdtree.nearestKSearch(test, 10, indices, distance) > 0)//K=10
{
cout << "测试点:" << test << endl;
for (int i = 0; i < indices.size(); ++i)
{
cout << "第" << i << "个: " << cloud->points[i] << endl;
}
}
return;
}
结果如下
还有distance是距离的平方,不是距离