PCL:UniformSampling ❤️ 点云均匀下采样
Posted 没事就要敲代码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PCL:UniformSampling ❤️ 点云均匀下采样相关的知识,希望对你有一定的参考价值。
1 原理
对点云数据创建一个三维体素栅格,然后,在每个体素保留一个最接近体素中心的点,代替体素中所有点。
2 代码实现
代码:
#include <iostream>
#include <pcl\\io\\pcd_io.h>
#include <pcl\\filters\\uniform_sampling.h>
using namespace std;
typedef pcl::PointXYZ PointT;
int main()
{
//------------------------------------ 加载点云 ---------------------------------
pcl::PointCloud<PointT>::Ptr cloud(new pcl::PointCloud<PointT>);
pcl::PCDReader reader;
if (reader.read("bunny.pcd", *cloud) < 0)
{
PCL_ERROR("\\a->点云文件不存在!\\n");
system("pause");
return -1;
}
cout << "->加载了 " << cloud->points.size() << " 个数据点" << endl;
//==============================================================================
//---------------------------------- 均匀下采样 --------------------------------
pcl::PointCloud<PointT>::Ptr cloud_filtered(new pcl::PointCloud<PointT>);
pcl::UniformSampling<PointT> us; //创建滤波器对象
us.setInputCloud(cloud); //设置待滤波点云
us.setRadiusSearch(0.005f); //设置滤波球半径
us.filter(*cloud_filtered); //执行滤波,保存滤波结果于cloud_filtered
//==============================================================================
//--------------------------------- 保存下采样点云 ------------------------------
if (!cloud_filtered->empty())
{
pcl::io::savePCDFileBinary("us.pcd", *cloud_filtered);
cout << "->下采样点云的点数为:" << cloud_filtered->points.size() << endl;
}
else
{
PCL_ERROR("\\a->下采样点云为空!\\n");
system("pause");
return -1;
}
//==============================================================================
return 0;
}
输出结果:
->加载了 35947 个数据点
->下采样点云的点数为:3017
3 结果展示
相关链接
以上是关于PCL:UniformSampling ❤️ 点云均匀下采样的主要内容,如果未能解决你的问题,请参考以下文章