PCL小工具四:pcd格式点云体素滤波(详细注释)

有些点云比较大,需要进行体素滤波后才方便使用,这里收录了一个实现方法

#include 
#include 
#include 
#include 

int main (int argc, char** argv)
{
  pcl::PCLPointCloud2::Ptr
  cloud(new pcl::PCLPointCloud2());
  pcl::PCLPointCloud2::Ptr
  cloud_filtered(new pcl::PCLPointCloud2());
  // 填入点云数据
  pcl::PCDReader reader; //点云读取对象
  // 把路径改为自己存放文件的路径,或者将该文件与生成的可执行文件放在同一目录下
  //  reader.read ("/media/jy/新加卷/pointlines数据集/00final.pcd", *cloud); // 读取点云文件中的数据到cloud对象
  reader.read ("/home/jy/Desktop/2011_09_30/2011_09_30_drive_0027_sync/velodyne_points/out.pcd", *cloud); // 读取点云文件中的数据到cloud对象
  std::cerr << "PointCloud before filtering: " << cloud->width * cloud->height  << " data points (" << pcl::getFieldsList(*cloud) << ")." <<std::endl;

  pcl::VoxelGrid<pcl::PCLPointCloud2> sor;   // 创建滤波器对象
  sor.setInputCloud (cloud);   //给滤波器对象设置需要过滤的点云
  sor.setLeafSize (0.10f, 0.10f, 0.10f); //设置滤波时创建的体素大小为10cm立方体
  sor.filter (*cloud_filtered); //执行滤波处理
  std::cerr << "PointCloud after filtering: " << cloud_filtered->width * cloud_filtered->height << " data points (" << pcl::getFieldsList (*cloud_filtered) << ")."; 
 //将数据写入磁盘

  pcl::PCDWriter writer;

  // writer.write ("/home/jy/Desktop/pcd2txt/build/00_flitered_010.pcd", *cloud_filtered, Eigen::Vector4f::Zero (), Eigen::Quaternionf::Identity (), false);
  writer.write ("/home/jy/Desktop/2011_09_30/2011_09_30_drive_0027_sync/velodyne_points/out_fliter.pcd", *cloud_filtered, Eigen::Vector4f::Zero (), Eigen::Quaternionf::Identity (), false);
  return (0);

}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

set(CMAKE_BUILD_TYPE "Release")
# 添加c++ 11标准支持
set(CMAKE_CXX_FLAGS "-std=c++11 -O2")

# Eigen
include_directories("/usr/include/eigen3")

find_package(PCL REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})


add_executable (voexlfliter src/voxelfliter.cpp) #注意这里不能替换
target_link_libraries(voexlfliter ${PCL_LIBRARIES})


这个代码在网上还是可以找到挺多资源的,不再赘述,有问题可留言
溜~

你可能感兴趣的:(PCL库的简单使用,自动驾驶,人工智能,机器学习)