c++
#define PCL_NO_PRECOMPILE // 预定义的这玩意必须有否则,编译会报链接库的错误
#include <pcl/pcl_macros.h> // 内存分配
#include <pcl/point_types.h> // 内置点云数据类型
struct EIGEN_ALIGN16 PointXYZLNormalI
{
PCL_ADD_POINT4D; // x,y,z位置
PCL_ADD_NORMAL4D; // 法向量 normal
union
{
struct
{
uint32_t label; //语义
float curvature; //曲率,一般有法向量都会计算曲率
float intensity;//强度
};
float data_c[4];
};
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
}
POINT_CLOUD_REGISTER_POINT_STRUCT(PointXYZLNormalI,
(float, x, x)(float, y, y)(float, z, z)
(float, normal_x, normal_x)(float, normal_y, normal_y)(float, normal_z, normal_z)
(uint32_t, label, label)(float, curvature, curvature)(float, intensity, intensity))
使用
直接使用自定义的数据类型,pcl中自带的各种滤波的库应该都没有问题,主要就是使用到 xyz和法向量
- 体素滤波并不是支持所有的自定义类型,而且没有提供可供更改的接口,如果有使用到体素滤波最好只使用pcl支持的数据类型:位置xyz,法向量normal,曲率curvature,点云强度intensity,和RGB颜色。其他的自定义数据格式会在体素滤波后丢失。