Newer
Older
#ifndef VOXELFILTER_HPP
#define VOXELFILTER_HPP
#include <iostream>
#include <pcl/PCLPointCloud2.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/io/ply_io.h>
inline void voxelGridFilter(std::string plyFilePath, float leafSize) {
// load ply file
pcl::PCLPointCloud2::Ptr cloud(new pcl::PCLPointCloud2());
pcl::io::loadPLYFile("../pointClouds/" + plyFilePath, *cloud);
std::cout << "Finished loading ply file with " << cloud->width * cloud->height
<< " points" << std::endl;
// create filtering object
pcl::PCLPointCloud2::Ptr outputCloud(new pcl::PCLPointCloud2());
pcl::VoxelGrid<pcl::PCLPointCloud2> voxelGrid;
voxelGrid.setInputCloud(cloud);
voxelGrid.filter(*outputCloud);
std::cout << "Finished filtering point cloud with "
<< outputCloud->width * outputCloud->height << " points"
<< std::endl;
std::cout << "The reduction is "
<< (1 - (float(outputCloud->width * outputCloud->height) /
float(cloud->width * cloud->height))) *
100
<< "%" << std::endl;
// save file to ply
pcl::io::savePLYFile("../pointClouds/downsampled_" + plyFilePath,
*outputCloud);
}
#endif // !VOXELFILTER_HPP