背景:
有时间我们希望可以去掉一些位置的噪点,或者只取一个位置的点云;可以方便的使用 box 进行过滤,可选择;
效果:
#include <pcl/filters/voxel_grid.h>
#include <pcl/filters/crop_box.h>
#include <pcl/point_cloud.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <boost/thread/thread.hpp>
#include <pcl/filters/radius_outlier_removal.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/filters/statistical_outlier_removal.h>
#include <pcl/features/normal_3d.h>
#include <pcl/io/vtk_io.h>
#include <pcl/io/vtk_lib_io.h>
#include<pcl/io/ply_io.h>
#include<pcl/point_types.h>
double * bounds = newData->GetBounds();
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_final{ new pcl::PointCloud<pcl::PointXYZ> };//加工后的pcl格式
//clip
pcl::CropBox<pcl::PointXYZ> clipper;//要包含的头文件,在官方文档里
Eigen::Vector4f min_point;
Eigen::Vector4f max_point;
float x1, y1, z1;
float x2, y2, z2;
bool negative;
min_point << bounds[0], bounds[2], bounds[4], 1.0;//cube的两个对角点
max_point << bounds[1], bounds[3], bounds[5], 1.0;
clipper.setMin(min_point);
clipper.setMax(max_point);
clipper.setInputCloud(cloud);
clipper.filter(*cloud_final);
clipper.setNegative(negative);//默认为false
//保存pcd文件
pcl::io::savePCDFileASCII("outFinal.pcd", *cloud_final);