Skip to content
Snippets Groups Projects
voxelfilter.hpp 1.27 KiB
Newer Older
  • Learn to ignore specific revisions
  • rinaboc's avatar
    rinaboc committed
    #ifndef VOXELFILTER_HPP
    #define VOXELFILTER_HPP
    #include <iostream>
    #include <pcl/PCLPointCloud2.h>
    #include <pcl/filters/voxel_grid.h>
    #include <pcl/io/ply_io.h>
    
    
    Bocska Karina's avatar
    Bocska Karina committed
    inline void voxelGridFilter(std::string plyFilePath, float leafSize) {
    
    rinaboc's avatar
    rinaboc committed
      // 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);
    
    Bocska Karina's avatar
    Bocska Karina committed
      voxelGrid.setLeafSize(leafSize, leafSize, leafSize);
    
    rinaboc's avatar
    rinaboc committed
      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