pcl中,PointXYZ类型已知点云中某个点的坐标,怎么获取它在点云中的索引?
1条回答 默认 最新
0xjade-Follow 2023-04-06 23:40关注可以使用pcl::search::KdTree类来实现这个功能。具体步骤如下:
1将点云转换为pcl::PointCloudpcl::PointXYZ::Ptr指针类型;
2创建pcl::search::KdTreepcl::PointXYZ对象,将点云传入构造函数中;
3创建pcl::PointXYZ对象,将已知点的坐标传入构造函数中;
4调用KdTree对象的nearestKSearch方法,传入查询点和k值(这里k=1),可以得到最近的点及其索引;
5最后返回最近点的索引即可。
示例代码如下:#include <pcl/kdtree/kdtree_flann.h> pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); // 假设点云已经被读取到cloud中 pcl::PointXYZ search_point(0.0, 0.0, 0.0); // 已知点的坐标 pcl::search::KdTree<pcl::PointXYZ> kdtree; kdtree.setInputCloud(cloud); int K = 1; std::vector<int> pointIdxNKNSearch(K); std::vector<float> pointNKNSquaredDistance(K); // 查询最近的点 if (kdtree.nearestKSearch(search_point, K, pointIdxNKNSearch, pointNKNSquaredDistance) > 0) { int nearest_idx = pointIdxNKNSearch[0]; // nearest_idx 即为最近点在点云中的索引 }需要注意的是,nearestKSearch方法返回的点的索引是以向量(vector)的形式返回的,而且由于这里k=1,所以向量中只有一个元素,即最近点的索引。
解决 无用评论 打赏 举报