本篇内容
初始化半径滤波器:
pcl::RadiusOutlierRemoval<pcl::PointXYZ> radius_filter;
设置输入点云:
radius_filter.setInputCloud(cloud);
设置半径大小:
radius_filter.setRadiusSearch(0.05);
设置点云数量阈值:
radius_filter.setMinNeighborsInRadius(10);
执行过滤:
radius_filter.filter(*cloud_filter);
#include <string>
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/filters/radius_outlier_removal.h>
// 前置点云类型,方便以后更改
using PointType = pcl::PointXYZ;
using PointCloud = pcl::PointCloud<PointType>;
using PointCloud_Ptr = PointCloud::Ptr;
int main(int argc, char **argv) {
if (argc < 3) {
std::cout<<"Usage: ./read_pcd <pcd_file_path> <pcd_save_path>\n";
return -1;
}
std::string pcd_file_path(argv[1]);
std::string pcd_save_path(argv[2]);
// 声明变量,用于保存点云数据
PointCloud_Ptr cloud(new PointCloud);
PointCloud_Ptr cloud_filter(new PointCloud);
// 读取pcd点云文件
if (pcl::io::loadPCDFile<PointType>(pcd_file_path, *cloud) == -1) {
std::cerr<<"check pcd path\n";
return -1;
}
// 初始化过滤器
pcl::RadiusOutlierRemoval<pcl::PointXYZ> radius_filter;
// 设置输入点云
radius_filter.setInputCloud(cloud);
// 设置半径大小
radius_filter.setRadiusSearch(0.05);
// 设置点云数量阈值
radius_filter.setMinNeighborsInRadius(10);
// 执行滤波
radius_filter.filter(*cloud_filter);
// 保存点云文件
pcl::io::savePCDFileASCII(pcd_save_path, *cloud_filter);
return 0;
}
因篇幅问题不能全部显示,请点此查看更多更全内容