【点云处理技术之PCL】PCL中的基本数据类型——PointCloud与PointT
⽂章⽬录
pcl中有很多预定义的数据类型,这些类型应该⾜以⽀持PCL中实现的所有算法和⽅法, 所以这节内容很重要,但是难度⼜不⼤,即使⽤户想要⾃定义数据类型,pcl中的数据类型也是⼤有帮助的。
0. PointCloud
新学期开学计划
先来介绍⼀下pcl::PointCloud数据类型,单看它的名字PointCloud(点云),就知道它由很多点云组成。
定义
我们定义⼀个点云类型可能类似于以下形式:
pcl::PointCloud<pcl::PointXYZ>::Ptr cloudPtr(new pcl::PointCloud<pcl::PointXYZ>);//点云指针类型
pcl::PointCloud<pcl::PointXYZ> cloud;//点云对象
pcl::PointXYZ point;//单个点云
访问形式
cloud.points[0].x;//访问第⼀个点的x
cloudPtr->points[0].x;//访问第⼀个点的x
point.x;//访问单个点的x
常⽤的成员变量和⽅法的使⽤与说明
属性说明
cloud.size()点云的个数
cloud.height有序列点云:点云⾏数(类似于图像);⽆序点云:height=1
cloud.width点云个数标识width*height,如果height=1,则size()=width
cloud.points PointT的点,它是vector形式,⽅便点云访问
cloud.is_den如果为fal,则表⽰点云中包含inf/NaN这样的点,使⽤的时候注意滤除这些点cloud.isOrganized ()判断点云是否有序(⼀般不使⽤height=1判断)
nsor_origin_传感器的采集位姿(origin/translation),Eigen::Vector4f类型,可选的,不常⽤nsor_orientaion_传感器的采集位姿(⽅向),Eigen::Quaternionf类型,可选的,不常⽤
1. PointXYZ——x,y,z
成员变量成员类型访问形式
xyz xyz均为float points[i].data[0]或points[i].x
xyz三个浮点数附加⼀个浮点数来满⾜存储对齐,具体类型如下:
{
float x;
float y;
float z;
};
};
2. PointXYZI——x,y,z,intensity
成员变量成员类型访问形式x、y、z和intensity均为float请查看以下数据结构
由于point的⼤部分操作会把data[4]元素设置成0或1,所以需要将intensity与xyz放在两个结构体中,具体如下:
ps更改背景颜色
union
{
float data[4];
struct
{
float x;
float y;
float z;
};
};
union
{
struct
{
float intensity;
};
彩色英语怎么读float data_c[4];
};
3. PointXYZRGBA——x,y,z,r,g,b,a
成员变量成员类型访问形式x、y、z、r、g、b和a等xyz为float;rgba为std::int32_t请查看以下数据结构因为使⽤了union,所以可以很⽅便地单独访问每个颜⾊通道。具体数据类型如下:
{
float x;
float y;
float z;
};
};
union
{
union
{
struct
{
std::uint8_t b;
std::uint8_t g;
std::uint8_t r;
std::uint8_t a;
};
float rgb;
};
std::uint32_t rgba;
};
4. PointXYZRGB——x,y,z,r,g,b
与PointXYZRGBA类似,只是少⼀个a
5. PointXY——x,y
成员变量成员类型访问形式x,y都是float类型请查看以下数据结构
struct
{
float x;
float y;
};
6. InterestPoint——x, y, z, strength
成员变量成员类型访问形式x, y, z, strength都是float类型请查看以下数据结构
{
float x;
float y;
float z;
};
};
union
{
struct
{
float strength;
梅弄影
};
float data_c[4];
};
7. PointNormal——x, y, z,normal,curvature
成员变量成员类型访问形式x, y, z,normal,curvature都是float类型请查看以下数据结构这⾥包含了3个独⽴的union,其中normal为曲⾯的法向量,curvature为曲率
union
{
float data[4];
struct
{
float x;
float y;
float z;
};
};
union
{
float data_n[4];
float normal[3];
struct
{
float normal_x;
float normal_y;
float normal_z;
};
};
union
{
struct
{
float curvature;
怎么看电脑多少寸
};
float data_c[4];
};
8. PointXYZRGBNormal——x, y, z, normal[3], curvature,rgba
成员变量成员类型访问形式
x, y, z,normal,curvature,rgb rgba为⽆符号整型,其它为float请查看以下数据结构成员变量成员类型访问形式
包含:点云的x, y, z和rgba,另外还包括曲⾯的法向量和曲率
union
{
float data[4];
struct
{
float x;
float y;
float z;
};
};
union
{
float data_n[4];
float normal[3];
富贵竹的特点struct
{
float normal_x;
float normal_y;
float normal_z;
寻找爱情};
}union
{
struct
{
union
{
union
{
struct
{
std::uint8_t b;
std::uint8_t g;
std::uint8_t r;
std::uint8_t a;
};
float rgb;
};重史
std::uint32_t rgba;
};
float curvature;
};
float data_c[4];
};
9. PointXYZINormal——float x, y, z, intensity, normal[3], curvature
成员变量成员类型访问形式x, y, z,normal,curvature,intensity都是float请查看以下数据结构