PCL库点云提取:从多个点云中提取与目标点云不同的点
以下是基于pcl库将pcl::PointCloudpcl::PointXYZRGB::Ptr cloud3与std::vector<pcl::PointCloudpcl::PointXYZRGB::Ptr> yezi内不相同的点单独提取放到pcl::PointCloudpcl::PointXYZRGB::Ptr jinggan的C++代码示例:\n\ncpp\n#include <pcl/point_cloud.h>\n#include <pcl/point_types.h>\n#include <pcl/filters/extract_indices.h>\n#include <pcl/search/kdtree.h>\n\ntypedef pcl::PointXYZRGB PointT;\ntypedef pcl::PointCloud<PointT> PointCloudT;\n\nint main()\n{\n // 创建输入点云\n pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud3(new pcl::PointCloud<pcl::PointXYZRGB>);\n std::vector<pcl::PointCloud<pcl::PointXYZRGB>::Ptr> yezi;\n\n // 创建输出点云\n pcl::PointCloud<pcl::PointXYZRGB>::Ptr jinggan(new pcl::PointCloud<pcl::PointXYZRGB>);\n\n // 假设yezi包含了多个点云,每个点云都要与cloud3进行比较\n for (size_t i = 0; i < yezi.size(); i++)\n {\n pcl::PointCloud<pcl::PointXYZRGB>::Ptr curr_cloud = yezi[i];\n\n // 创建KD树进行最近邻搜索\n pcl::search::KdTree<pcl::PointXYZRGB>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZRGB>);\n tree->setInputCloud(curr_cloud);\n\n // 提取不在cloud3中的点\n pcl::PointCloud<pcl::PointXYZRGB>::Ptr temp_cloud(new pcl::PointCloud<pcl::PointXYZRGB>);\n for (size_t j = 0; j < curr_cloud->points.size(); j++)\n {\n std::vector<int> indices(1);\n std::vector<float> sqr_distances(1);\n tree->nearestKSearch(curr_cloud->points[j], 1, indices, sqr_distances);\n if (sqr_distances[0] > 0.001) // 设置一个阈值,判断是否为不同的点\n {\n temp_cloud->points.push_back(curr_cloud->points[j]);\n }\n }\n\n // 将不同的点添加到输出点云\n *jinggan += *temp_cloud;\n }\n\n return 0;\n}\n\n\n上述代码中,通过创建KD树进行最近邻搜索,提取不在cloud3中的点,并将不同的点添加到jinggan点云中。需要注意的是,代码中的阈值sqr_distances[0] > 0.001可以根据实际情况进行调整,用于判断两个点是否不同。
原文地址: https://www.cveoy.top/t/topic/pTRY 著作权归作者所有。请勿转载和采集!