目录
前言
特征模块的一些常用指令。
一、头文件及声明
#include <pcl/point_cloud.h> // 点的集合
#include <pcl/point_types.h> // PCL中支持的点类型头文件
#include <pcl/io/ply_io.h> // PLY读写类相关的头文件
#include <pcl/io/pcd_io.h> // PCD读写类相关的头文件
#include <pcl/visualization/pcl_visualizer.h> // 可视化
using namespace std;
using PointT = pcl::PointXYZ;
using CloudP = pcl::PointCloud<PointT>;
using PointN = pcl::PointNormal;
using CloudN = pcl::PointCloud<PointN>;
using PointL = pcl::PointXYZL;
using CloudL = pcl::PointCloud<PointL>;
二、Feature模块
1、法向量计算
#include <pcl/features/normal_3d.h> // 单线程
#include <pcl/features/normal_3d_omp.h> // 多线程,内部包含了normal_3d.h
void normalsCalculation(CloudP::Ptr cloud, pcl::PointCloud<pcl::Normal>::Ptr normals)
{
#if 0
// 单线程
pcl::NormalEstimation<PointT, pcl::Normal> ne;
#else
// 多线程
pcl::NormalEstimationOMP<PointT, pcl::Normal> ne;
ne.setNumberOfThreads(4);
#endif
ne.setInputCloud(cloud->makeShared());
ne.setSearchSurface(cloud->makeShared());
ne.setKSearch(20);
ne.compute(*normals);
}
/********************************************************************
* @brief 计算点云法线并拼接到点云数据中
* @note
* @param CloudP::Ptr in_cloud 输入点云
* @return pcl::PointCloud<pcl::PointNormal>::Ptr 包含法线信息的点云
********************************************************************/
CloudN::Ptr compute_normals(CloudP::Ptr in_cloud)
{
pcl::NormalEstimationOMP<PointT, pcl::Normal> normal_estimator;
pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::