#include<iostream>
#include<pcl/point_types.h>
#include<pcl/filters/voxel_grid.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/cloud_viewer.h>
int main(int argc,char** argv)
{
pcl::PointCloud<pcl::PointXYZ>::Ptr my_cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr my_cloud_filter(new pcl::PointCloud<pcl::PointXYZ>);
//sensor_msgs::PointCloud2::Ptr cloud(new sensor_msgs::PointCloud2);
//sensor_msgs::PointCloud2::Ptr my_cloud_filter(new sensor_msgs::PointCloud2);
pcl::PCDReader reader;
reader.read("E:\\vs_code\\my_cylinder.pcd",*my_cloud);
//pcl::VoxelGrid<sensor_msgs::PointCloud2> my_voxel_fliter;
pcl::VoxelGrid<pcl::PointXYZ> my_voxel_fliter;
my_voxel_fliter.setInputCloud(my_cloud);
my_voxel_fliter.setLeafSize(1.0f,1.0f,1.0f);
my_voxel_fliter.filter(*my_cloud_filter);
pcl::visualization::PCLVisualizer my_viewer1;
pcl::visualization::PCLVisualizer my_viewer2;
my_viewer1.addPointCloud(my_cloud);
my_viewer2.addPointCloud(my_cloud_filter);
while(!my_viewer1.wasStopped())
{
my_viewer1.spinOnce(100);
my_viewer1.spinOnce(100);
}
pcl::PCDWriter writer;
writer.write("my_filter.pcd",*my_cloud_filter);
return 0;
}
和上一篇的直通滤波差不多,都是读点云,设置参数,进行计算,输出结果。
这里为了能够显示点云,对PCL书里的代码进行了修改
pcl::VoxelGrid<pcl::PointXYZ> my_voxel_fliter;
my_voxel_fliter.setInputCloud(my_cloud);
my_voxel_fliter.setLeafSize(1.0f,1.0f,1.0f);
my_voxel_fliter.filter(*my_cloud_filter);
这里设置的三维栅格参数比较重要,过小会导致降采样效果不明显,过大又会导致特征的明显缺失
最后的结果如下