PCL中的VoxelGrid类提供了降采样功能,使用VoxelGrid可方便的实现点云数据抽稀,请看代码:
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>
#include "LasLoader.h"
#include "PointCloudViewer.h"
int main()
{
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud = LasLoader::loadLas("420-432_realColor_small_Cloud.las");
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZRGBA>());
std::cerr << "PointCloud before filtering: " << cloud->width * cloud->height
<< " data points (" << pcl::getFieldsList(*cloud) << ")." << std::endl;
// Create the filtering object
pcl::VoxelGrid<pcl::PointXYZRGBA> sor;
sor.setInputCloud(cloud);
sor.setLeafSize(2.01f, 2.01f, 2.01f);
sor.filter(*cloud_filtered);
std::cerr << "PointCloud after filtering: " << cloud_filtered->width * cloud_filtered->height
<< " data points (" << pcl::getFieldsList(*cloud_filtered) << ")." << std::endl;
PointCloudViewer viewer;
viewer.showCloud(cloud);
PointCloudViewer viewer2;
viewer2.showCloud(cloud_filtered);
while (viewer.isDone() == false || viewer2.isDone() == false)
{
if (viewer.isDone() == false)
{
viewer.renderFrame();
}
if (viewer2.isDone() == false)
{
viewer2.renderFrame();
}
}
return (0);
}
LasLoader和PointCloudViewer的源码参见文章:如何使用OSG引擎显示PCL的点云数据?
完整Visual Studio 2017工程下载:Filtering-Downsample.rar
芸芸小站首发,阅读原文:http://xiaoyunyun.net/index.php/archives/192.html