点云切片的实现(PCL)C++

一、实现逻辑

        1、通过PCL库的getMinMax3D得到xyz轴上的最大最小值;

        函数原型:

pcl::getMinMax3D(const pcl::PointCloud<PointT> &cloud, POintT &min_pt, PointT &max_pt)

        2、设置切片厚度,计算某一轴方向上的切片数量,循环遍历该数量;

        3、通过PCL库的PassThrough对点云进行切片

        通过PassThrough的setFilterLimits设置切片范围。

        函数原型:

setFilterLimits(const float &limit_min,const float &limit_max)

        由此便可通过循环遍历切片数量来设置切片范围,递进式对点云进行指定厚度的切片。

二、代码实现

//-----------------.h头文件部分-----------------//
//读取点云的头文件
#include <pcl/io/pcd_io.h>

//点云切片的头文件
#include <pcl/common/common.h>
#include <pcl/filters/passthrough.h>

//io流的头文件
#include <iostream>

//-----------------.cpp文件部分-----------------//

//初始化一个点云
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
 
//加载点云文件
if(pcl::io::loadPCDFile("cloud.pcd",*cloud)==-1)
{
    //此处cloud.pcd是你的点云文件
}

//初始化三个轴最大最小值的容器
pcl::PointXYZ minValues;
pcl::PointXYZ maxValues;
//计算三个轴的最大最小值
pcl::getMinMax3D(*cloud,minValues,maxValues);

//选择x轴做切片
double xMax = maxValues.x;
double xMin = minValues.x;
//设置切片厚度
double sliceInterval = 0.5;
//计算x轴方向的切片总数
int sliceNum_x = floor((xMax-xMin)/sliceInterval)-1;
//设置切片起始值
double sliceBeginCoordinate = xMin;
//初始化保存切片的点云
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_Save(new pcl::PointCloud<pcl::PointXYZ>);
//循环获取切片
for(int i = 0; i<= sliceNum_x ;++i)
{
    float min_value = sliceBeginCoordinate;    //切片的起始值
    //给保存的点云命名
    std::ostringstream oss;
    oss << "cloud_section" << i << ".pcd";
    std::string slice_name = oss.str();

    //直通滤波对象
    pcl::PassThrough<pcl::PointXYZ> pass;
    pass.setInputCloud(cloud);
    pass.setFilterFieldName("x");    //选择x轴
    pass.setFilterLimits(min_value ,min_value + sliceInterval )    //切片范围
    pass.filter(*cloud_Save);
    //保存切片
    if(!cloud_Save->empty())
    {
        pcl::io::savePCDFile(slice_name ,*cloud_Save);
        cloud_Save->clear();
    }
    sliceBeginCoordinate = min_value + sliceInterval;
}


三、实现效果

        以上是切片实现的基础内容,如果需要配合上其它操作方式自行添加,例如使用QT+PCL对点云切片的可控操作;

猜你喜欢

转载自blog.csdn.net/qq_19319481/article/details/132709872
今日推荐