PCL库:提取两个点云差异点并保存为新点云的C++代码示例
以下是基于PCL库的C++代码示例,用于将两个点云(clouds84和clouds85)中不同的点保存到cloud86中:
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/filters/passthrough.h>
typedef pcl::PointXYZ PointT;
typedef pcl::PointCloud<PointT> PointCloudT;
int main()
{
// 加载点云数据
PointCloudT::Ptr cloud84(new PointCloudT);
PointCloudT::Ptr cloud85(new PointCloudT);
pcl::io::loadPCDFile('clouds84.pcd', *cloud84);
pcl::io::loadPCDFile('clouds85.pcd', *cloud85);
// 创建输出点云
PointCloudT::Ptr cloud86(new PointCloudT);
// 设置滤波器
pcl::PassThrough<PointT> pass;
pass.setFilterFieldName('z'); // 根据需要更改过滤字段
pass.setFilterLimits(0.0, 1.0); // 根据需要更改过滤范围
// 对cloud84进行滤波
pass.setInputCloud(cloud84);
pass.filter(*cloud84);
// 对cloud85进行滤波
pass.setInputCloud(cloud85);
pass.filter(*cloud85);
// 找到两个点云中不同的点
for (const auto& point : cloud84->points)
{
bool found = false;
for (const auto& compare_point : cloud85->points)
{
if (point.x == compare_point.x && point.y == compare_point.y && point.z == compare_point.z)
{
found = true;
break;
}
}
if (!found)
{
cloud86->push_back(point);
}
}
// 保存结果点云
pcl::io::savePCDFileBinary('cloud86.pcd', *cloud86);
return 0;
}
请注意,此代码假设点云中的点类型为pcl::PointXYZ,并且过滤字段为z(可以根据需要进行更改)。还假设点云文件采用PCD格式进行存储。
原文地址: https://www.cveoy.top/t/topic/qqNj 著作权归作者所有。请勿转载和采集!