PCL基本知识

1. Ptr类型和非Ptr类型相互转换


pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_Ptr(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ> cloud;
cloud=*cloud_Ptr;//Ptr智能指针转化为非指针类型
cloud_Ptr=cloud.makeShared;//非指针类型转化为Ptr智能指针

2. PCLPointCloud2与PointCloud类型区别

PCLPointCloud2和PointCloud两者一样,但前者只存在PCL1.X版本中(1.8除外),代表着点云数据格式,之间可以相互转化。

pcl::PCLPointCloud2::Ptr cloud_blob (new pcl::PCLPointCloud2);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_blob (new pcl::PointCloud<pcl::PointXYZ>);//两者等价

相互转换:
//PointXYZ to PCLPointCloud2
pcl::PointCloud<pcl::PointXYZ> local_map;
pcl::PCLPointCloud2* local_map_pc2_ptr = new pcl::PCLPointCloud2;
pcl::toPCLPointCloud2(local_map, *local_map_pc2_ptr);

//PCLPointCloud2 to PointXYZ
pcl::PCLPointCloud2 local_map_pc2;
pcl::fromPCLPointCloud2(local_map_pc2, local_map);

3. 点云采样

(1)下采样

使用pcl::VoxelGrid函数进行下采样,原理是通过构造一个三维体素栅格,然后在每个体素内用体素内的所有点的重心近似显示体素中的其他点,这样体素内所有点就用一个重心点来表示,进行下采样的来达到滤波的效果,这样就大大的减少了数据量,特别是在配准,曲面重建等工作之前作为预处理,可以很好的提高程序的运行速度,

pcl::VoxelGrid<pcl::PointXYZ> sor;
sor.setInputCloud(cloud_ptr);//将需要采样点云加入
sor.setLeafSize(0.5f, 0.5f, 0.5f);//体素大小,体现点云稀疏程度
sor.filter(*cloud_filter);//降采样后输出到*cloud_filtered

效果对比图:

                               

(2)均匀采样

与下采样类似,采用

                                  

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值