1.PCL头文件引用说明(按需添加)
#include <boost/make_shared.hpp> //boost指针相关头文件
#include <pcl/point_types.h> //点类型定义头文件
#include <pcl/point_cloud.h> //点云类定义头文件
#include <pcl/features/normal_3d.h> //法线特征头文件
#include <pcl/features/normal_3d_omp.h> //法线特征加速头文件
#include <pcl/features/fpfh.h> //fpfh类特征头文件
#include <pcl/features/fpfh_omp.h> //fpfh加速类头文件
#include <pcl/features/boundary.h> //边界提取头文件
#include <pcl/search/kdtree.h> //kdtree搜索对象类头文件
#include <pcl/point_representation.h> //点表示相关的头文件
#include <pcl/io/pcd_io.h> //PCD文件打开存储类头文件
#include <pcl/filters/passthrough.h> //直通滤波器头文件
#include <pcl/filters/voxel_grid.h> //用于体素网格化的滤波类头文件
#include <pcl/filters/filter.h> //滤波相关头文件
#include <pcl/filters/project_inliers.h> //点云投影头文件
#include <pcl/filters/extract_indices.h> //索引提取头文件
#include <pcl/filters/statistical_outlier_removal.h> //统计离群点类头文件
#include <pcl/segmentation/sac_segmentation.h> //RanSaC分割
#include <pcl/segmentation/region_growing.h> //区域生长
#include <pcl/segmentation/region_growing_rgb.h> //基于颜色的区域生长
#include <pcl/segmentation/supervoxel_clustering.h> //超体聚类
#include <pcl/segmentation/lccp_segmentation.h> //基于凹凸性分割
#include <pcl/surface/mls.h> //点云平滑类头文件
#include <pcl/registration/icp.h> //ICP类相关头文件
#include <pcl/registration/icp_nl.h> //非线性ICP 相关头文件
#include <pcl/registration/transforms.h> //变换矩阵类头文件
#include <pcl/registration/ia_ransac.h> //sac-ia类头文件
#include <pcl/registration/correspondence_estimation.h> //直方图配准
#include <pcl/registration/correspondence_rejection_features.h>//特征的错误对应关系去除
#include <pcl/registration/correspondence_rejection_sample_consensus.h>//随机采样一致性去除
#include <pcl/visualization/pcl_visualizer.h> //可视化类头文件
typedef pcl::PointXYZ Pxyz;
typedef pcl::PointXYZRGB Prgb;
typedef pcl::PointCloud<Pxyz> PXYZ;
typedef pcl::PointCloud<Prgb> PRGB;
typedef pcl::Normal Pnl;
typedef pcl::PointNormal Pnt;
typedef pcl::PointCloud<Pnt> PNT;
2.PCL 文件读取与保存(二进制读取、存储速度快)
//读取文件
pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
if(pcl::io::loadPCDFile<pcl::PointXYZRGB>("path_cloud.pcd", *cloud) == -1)
{
std::cout<<"读取文件失败,检查文件路径与格式"<<std::endl;
return -1;
}
//保存文件
pcl::PCDWriter writer;
writer.write<pcl::PointXYZRGB>("name.pcd",*cloud);
writer.writeASCII<pcl::PointXYZRGB>("name.pcd", *cloud);//ASCII方式保存
writer.writeBinary<pcl::PointXYZRGB>("name.pcd", *cloud);//二进制方式保存
3.PCL 点云kdtree最近邻搜索
pcl::kdTreeFLANN<pcl::PointXYZRGB> kdtree; //创建kdtree 对象
kdtree.setInputCloud(cloud); //添加点云
pcl::PointXYZRGB searchPoint; //设置查询点
int num = 10; //查询近邻个数
std::vector<int> pointIdx(num); //存放索引点
std::vector<float> pointDist(num); //存放近邻中心距离
kdtree.nearestKSearch(searchPoint, k, pointIdx, pointDist); //进行点云检索