#include <iostream>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/common/common_headers.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h> // 点类型定义头文件
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/visualization/pcl_visualizer.h> //点云显示头文件
#include <pcl/filters/voxel_grid.h>
#include <pcl/filters/extract_indices.h>
#include <pcl/filters/statistical_outlier_removal.h> //统计滤波器头文件
#include <pcl/registration/gicp.h>
#include <pcl/registration/icp.h> // ICP配准类相关的头文件
#include <pcl/features/normal_3d.h>
#include <pcl/kdtree/kdtree_flann.h>
using namespace std;
int main()
{
// 加载源点云
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_source(new pcl::PointCloud<pcl::PointXYZ>());
pcl::io::loadPCDFile<pcl::PointXYZ>("D:\\PCL\\rabbit.pcd", *cloud_source);
cout << "源点云加载完成!" << endl;
// 创建统计滤波器对象
pcl::StatisticalOutlierRemoval<pcl::PointXYZ> staticOR;
staticOR.setInputCloud(cloud_source);
staticOR.setMeanK(20); // 设置统计平均点数,增加MeanK的值会使每个点的邻域变大
staticOR.setStddevMulThresh(1); // 设置标准差倍数阈值,增加StddevMulThresh的值会减少被移除的点的数量
// 进行滤波
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>());
staticOR.filter(*cloud_filtered);//cloud_filtered 将用于存储经过离群点移除处理后的点云数据。
cloud_source = cloud_filtered;
cout << "源点云滤波完成!" << endl;
// 对源点云进行VoxelGrid降采样
pcl::VoxelGrid<pcl::PointXYZ> sor;
sor.setInputCloud(cloud_source);
sor.setLeafSize(0.005f, 0.005f, 0.005f); // 设置体素大小
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_source_subsampled(new pcl::PointCloud<pcl::PointXYZ>());
sor.filter(*cloud_source_subsampled);
// 保存点云到文件
pcl::io::savePCDFileBinary("D:\\PCL\\rabbit1.pcd", *cloud_source_subsampled);
cout << "滤波后点云文件已经保存" << endl;
return 0;
}
标签:点云降,PointCloud,staticOR,c++,source,pcl,点云,include,cloud
From: https://blog.csdn.net/qq_64095888/article/details/143301795