"#include <pcl/point_cloud.h>\n#include <pcl/io/pcd_io.h>\n\nint main() {\n // Load clouds84 and clouds85\n pcl::PointCloudpcl::PointXYZ::Ptr cloud84(new pcl::PointCloudpcl::PointXYZ);\n pcl::PointCloudpcl::PointXYZ::Ptr cloud85(new pcl::PointCloudpcl::PointXYZ);\n pcl::PointCloudpcl::PointXYZ::Ptr cloud86(new pcl::PointCloudpcl::PointXYZ);\n\n pcl::io::loadPCDFilepcl::PointXYZ("clouds84.pcd", *cloud84);\n pcl::io::loadPCDFilepcl::PointXYZ("clouds85.pcd", *cloud85);\n\n // Find the different points between clouds84 and clouds85\n pcl::PointCloudpcl::PointXYZ::Ptr cloud_diff(new pcl::PointCloudpcl::PointXYZ);\n std::vector indices_diff;\n pcl::PointCloudpcl::PointXYZ::Ptr cloud_union(new pcl::PointCloudpcl::PointXYZ);\n std::vector indices_union;\n\n pcl::KdTreeFLANNpcl::PointXYZ kdtree;\n kdtree.setInputCloud(cloud84);\n\n for (int i = 0; i < cloud85->size(); ++i) {\n pcl::PointXYZ search_point = cloud85->at(i);\n std::vector indices(1);\n std::vector distances(1);\n\n if (kdtree.nearestKSearch(search_point, 1, indices, distances) > 0) {\n if (distances[0] > 0.001) { // Threshold for difference\n cloud_diff->push_back(search_point);\n indices_diff.push_back(i);\n }\n else {\n cloud_union->push_back(search_point);\n indices_union.push_back(i);\n }\n }\n }\n\n // Save the different points to cloud86\n pcl::copyPointCloud(*cloud85, indices_diff, *cloud86);\n pcl::io::savePCDFileASCII("cloud86.pcd", *cloud86);\n\n return 0;\n}\n"该代码假设clouds84.pcdclouds85.pcd是存储点云数据的PCD文件。代码使用KdTreeFLANN来查找两个点云之间的最近邻点,并且根据给定的阈值确定不同的点。最后,将不同点保存到cloud86.pcd文件中。您可以根据自己的需求调整阈值和文件名。

使用 PCL 库将两个点云的不同点保存到新点云的 C++ 代码

原文地址: https://www.cveoy.top/t/topic/qqNg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录