00001 #include <pcl/point_types.h> 00002 #include <pcl/io/pcd_io.h> 00003 #include <pcl/filters/passthrough.h> 00004 #include <pcl/console/parse.h> 00005 00006 using namespace pcl::console; 00007 typedef pcl::PointXYZRGB PointT; 00008 00009 int main( int argc, char** argv ) 00010 { 00011 // Parameter parsing 00012 if( argc != 3 ) 00013 { 00014 std::cerr << "Syntax is: " << argv[0] << " {input_pointcloud_filename.pcd} {output_pointcloud_filename.pcd}" << std::endl; 00015 return(-1); 00016 } 00017 00018 // Read input cloud 00019 pcl::PointCloud<PointT>::Ptr input_cloud (new pcl::PointCloud<PointT>); 00020 pcl::PCDReader reader; 00021 pcl::PCDWriter writer; 00022 reader.read ( argv[1], *input_cloud); 00023 std::cerr << "Loaded cloud with points: " << input_cloud->points.size() << std::endl; 00024 00025 // Create the pass through filter 00026 pcl::PointCloud<PointT>::Ptr filtered_cloud (new pcl::PointCloud<PointT>); 00027 pcl::PassThrough<PointT> filter; 00028 filter.setInputCloud (input_cloud); 00029 filter.setFilterFieldName ("x"); 00030 filter.setFilterLimits (-100.0, 100.0); 00031 // filter.setKeepOrganized (true); 00032 // filter.setUserFilterValue (1000.0); 00033 filter.filter (*filtered_cloud); 00034 00035 //write back filtered cloud 00036 std::cerr << "Saving cloud to: " << std::string(argv[2]) << " with points: " << filtered_cloud->points.size() << std::endl; 00037 writer.write(std::string(argv[2]), *filtered_cloud, false); 00038 return(0); 00039 }