美文网首页
pcl 点云类型及其操作

pcl 点云类型及其操作

作者: ou源仔 | 来源:发表于2021-01-12 13:03 被阅读0次

点的类型有

#include <pcl/point_types.hpp>
pcl::PointXYZ
pcl::PointXYZI
pcl::PointXYZRGB
pcl::PointXYZHSV

点云类型

#include <pcl/point_cloud.h>
PointCloud类型:以std::vector<PointT, Eigen::aligned_allocator<PointT> > points为数据存储,自己又套了一层API
#include <pcl/PCLPointCloud2.h>
PCLPointCloud2类型:二进制存储的点云类型std::vector<pcl::uint8_t> data;。按编码(std::vector<pcl::PCLPointField>  fields;)对应data中各位段的意义。

点云类型基本操作

/* 常用成员 */
//pcl库的所有类型都有Ptr对应std::share_ptr和ConstPtr
pcl::PointCloud<pcl::PointXYZ>::Ptr;
pcl::PCLPointCloud2<pcl::PointXYZ>::Ptr;
pcl::visualization::PCLVisualizer::Ptr;
-----------------------------------------------------------------------------------------------
/* 常用运算 */
//直接拼接融合
+= 和+
//访问元素
pc(row,col)或pc.at(row,col)其中at是带保护的。且只有height>=0才能使用这两个方法(按2D图像方式存储)
而pc[i],访问pc中存储vector的第i个值。或pc.point.data()返回首地址
//遍历
由于点云实际是vector实现的所以可以使用标准遍历形式
for(auto item:PC){}
//数据流重载
<<可以直接输出

点云类型之间的转换

/* ros的sensor_msgs::PointCloud2和pcl的点云转换 */
#include <pcl_conversions/pcl_conversions.h>
pcl::fromROSMsg(ros_pc,pcl_pc) 
pcl::moveFromROSMsg(ros_pc,pcl_pc)//尽量不用,这是把ros_pc的以指针形式和内部中间临时变量交换,再拷贝给pcl_pc。使用后pcl_pc是一个野指针。

pcl::toROSMsg(pcl_pc,ros_pc)//记得修改转换后ros_pc的stamped。或在转换器给pcl_pc的stamped赋值
pcl::moveToROSMsg(pcl_pc,ros_pc)//同上使用后pcl_pc是一个野指针。
-----------------------------------------------------------------------------------------------
/* pcl::pointcloud和pclpointcloud2转换 */
pcl::toPCLPointCloud2(pc,pc2);
pcl::fromPCLPointCloud2(pc2,pc);

点云拷贝

//不必外部初始化或为output甚至内存,直接覆盖掉元数据
 pcl::copyPointCloud(intut,output)

相关文章

网友评论

      本文标题:pcl 点云类型及其操作

      本文链接:https://www.haomeiwen.com/subject/kuztwktx.html