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

news/2025/3/19 7:14:52/

一、实现逻辑

        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对点云切片的可控操作;


http://www.ppmy.cn/news/1093856.html

相关文章

模拟Proactor模式实现 I/O 处理单元

编写main.cpp 1.socket通信 服务器应用程序可以通过读取和写入 Socket 对象 来监听来自客户端的请求并向客户端返回响应 #define MAX_FD 65536 // 最大的文件描述符个数 #define MAX_EVENT_NUMBER 10000 // 监听的最大的事件数量 // 添加信号捕捉 void addsig(int sig, …

selenium自动化测试过程中接口的调用信息

在上一篇中我也给自己提出一个需求&#xff1a;如果记录在测试过程中接口的调用情况&#xff1f;提出这个需求&#xff0c;我觉得是有意义的。你在测试过程中肯定会遇到一些莫名其妙的问题&#xff0c;比如&#xff1a;web某个页面一直在刷进度条&#xff0c;导致你定位元素失败…

10吨地埋式农村生活废水处理设备厂家电话

10吨地埋式农村生活废水处理设备厂家电话 工艺流程&#xff1a; 厌氧生化处理-----好氧生物接触氧化-----二沉沉淀-----二氧化氯接触消毒----达标排放 工艺流程 采用生物膜法&#xff1a;缺氧----好氧(A/0)处理工艺。A/O即缺氧好氧生物接触氧化法是一种成熟的生物处理工艺&…

Springboot 多模块项目集成Jacoco统计单元测试覆盖率

最外层POM配置 <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.18.1</version><configuration><testFailureIgnore>true</testFailureIgnore>&…

Deadfellaz Game Jam 启动,丰厚奖励等你来赢取!

The Horde 即将在 The Sandbox 上线&#xff0c;是时候让勇敢的体素英雄们与强悍的 Boss 一同展开紧张刺激的战斗了&#xff01;使用 The Sandbox 无编程软件 Game Maker 中的多功能工具&#xff0c;设计令人肾上腺素飙升的对决、策略性的智斗、极具挑战性的机制等&#xff01;…

在UI设计中用什么样的字体?优漫动游

在windos下支持的字体 在UI设计中用什么样的字体&#xff1f; 宋体&#xff08;simsun&#xff09;&#xff1a;在win下大部分的浏览器是默认的&#xff0c;适合小字号&#xff0c;不太适合大字号。 微软雅黑&#xff1a;是目前win浏览器中最值得使用的。 Arial&#…

zabbix 自动发现

哈喽大家好&#xff0c;我是咸鱼 昨天老大让我初始化一批服务器&#xff0c;吭哧吭哧弄完之后需要把这批机器添加到 zabbix 上去 但是我发现一台一台添加效率好低&#xff0c;而且特别繁琐&#xff0c;当时我没有想出有什么好的方法&#xff0c;今天上网搜了一下相关资料之后…

RK3588烧录和环境部署

RK3588相关烧录固件请到firefly官网下载&#xff0c;firefly下载地址&#xff0c;环境配置步骤详细说明&#xff1a; 第1步&#xff1a;在win10下安装DriverAssitant目录下的名为DriverInstall.exe的驱动助手&#xff1b; 第2步&#xff1a;运行在RKDevTool目录下的RKDevTool.e…