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

news2024/11/25 22:51:28

一、实现逻辑

        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.coloradmin.cn/o/980355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

冠达管理:有色金属迎顺周期行情 板块估值降至历史低位

近期&#xff0c;A股地产链相继迸发&#xff0c;家居用品、房地产服务等细分板块持续反弹。沉寂多时的地产链上游——有色金属板块相同遭到资金青睐。证券时报数据宝统计&#xff0c;8月28日以来&#xff0c;有色金属指数累计上涨近6%&#xff0c;跑赢同期上证指数。 从个股来…

高大上的YOLOV3对象检测算法,使用python也可轻松实现

继续我们的目标检测算法的分享,前期我们介绍了SSD目标检测算法的python实现以及Faster-RCNN目标检测算法的python实现以及yolo目标检测算法的darknet的window环境安装,本期我们简单介绍一下如何使用python来进行YOLOV3的对象检测算法 YOLOV3对象检测 YOLOV3的基础知识大家可以…

电脑dll修复工具下载安装,专门解决(win系统)MSVCP100/110/120/140.dll丢失问题

我将为大家分享一个与我们日常生活息息相关的话题——电脑提示vcomp140.dll丢失的6种解决方法。希望通过这次演讲&#xff0c;能够帮助大家解决在日常使用电脑过程中遇到的问题&#xff0c;提高我们的电脑技能。 首先&#xff0c;让我们来了解一下vcomp140.dll是什么&#xff…

核辐射检测仪电子测量方案

核辐射检测仪又名辐射检测仪&#xff0c;主要是安检、海关、实验室、金属探测公司等行业使用。但由于2023年8月24日排放核废水&#xff0c;导致海洋遭受核辐射污染&#xff0c;由于大海的净化能力有限&#xff0c;则会导致核废水有可能随着洋流的运动&#xff0c;会流至我国海域…

9月第1周榜单丨哔哩哔哩飞瓜数据B站UP主排行榜发布!

飞瓜轻数发布2023年8月28日-9月3日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数、带货数据等维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能…

30万元以下,蔚来新品牌阿尔卑斯的激烈战场

作者 | 张祥威 编辑 | 德新 阿尔卑斯&#xff0c;蔚来面向大众市场的子品牌&#xff0c;将在明年下半年推出首款新车。目前这款车的信息正陆续释放&#xff1a; 定价20-30万区间&#xff1b;首发蔚来NT3.0平台&#xff1b;定位纯电轿车&#xff1b;搭载800V高压架构&…

Android自定义注解实现一键校验实体类参数

Android自定义注解实现一键校验实体类参数 前言本文代码需求实现新建自定义类注解新建变量注解新建变量注解VerifyParams给变量注解增添方法给实体类增加上注解新建验证方法EntityValidator解析注解字段查看效果 遗留问题思考问题解决遗留问题新增注解方法分析空判断的情况提前…

小红书种草推广步骤是怎样的,小红书种草效果好吗?

小红书作为一个以美妆、时尚和生活为主题的社交电商平台&#xff0c;引起了广大用户的关注。作为品牌或商家&#xff0c;通过在小红书上进行种草推广能够有效提升品牌曝光度并吸引潜在客户。小红书的种草推广步骤是怎样的&#xff1f;种草推广效果又如何呢&#xff1f;下面伯乐…

OpenCV(二十四):可分离滤波

目录 1.可分离滤波的原理 2.可分离滤波函数sepFilter2D() 3.示例代码 1.可分离滤波的原理 可分离滤波的原理基于滤波器的可分离性。对于一个二维滤波器&#xff0c;如果它可以表示为水平方向和垂直方向两个一维滤波器的卷积&#xff0c;那么它就是可分离的。也就是说&#x…

jmeter测试

装java环境配置环境变量 装jmeter 设置中文

《存储IO路径》专题:不同IO调度器的差异

在计算机世界中&#xff0c;有一个神秘的王国&#xff0c;叫做IO王国。这个王国里有四种奇怪的生物&#xff0c;它们分别是Noop调度器、Anticipatory调度器、Deadline调度器和CFQ调度器。IO调度器负责管理计算机中的IO请求&#xff0c;确保它们有序地通过。就像一个交警会根据车…

3.3 【MySQL】字符集和比较规则的应用

3.3.1 各级别的字符集和比较规则 MySQL 有4个级别的字符集和比较规则&#xff0c;分别是&#xff1a; 服务器级别 数据库级别 表级别 列级别 3.3.1.1 服务器级别 MySQL 提供了两个系统变量来表示服务器级别的字符集和比较规则&#xff1a; 系统变量 描述 character_se…

VIRTIO-BLK代码分析(4)VIRTIO设备中断的注入

VIRTIO设备中断包括vq中断和config中断。Vq中断用于通知Guest已完成数据的处理&#xff0c;虚拟机中可以完成IO请求。Vq中断的模拟是通过irqfd实现的&#xff0c;它将虚拟机中断与irqfd关联上&#xff08;KVM_SET_GSI_ROUTING和KVM_IRQFD&#xff09;&#xff0c;当虚拟机中访问…

Centos7设置设置时间与windows同步

CentOS7设置时间与windows同步 使用ntp使CentOS服务器的系统时间与机器时间同步于windows服务器centOS机器安装ntpwindows安装ntp同步时间 使用ntp使CentOS服务器的系统时间与机器时间同步于windows服务器 思路是将windows服务器作为ntp服务端&#xff0c;centOS服务器作为ntp…

border-image和border-radius一起使用border-radius不起作用

关于border-image和border-radius一起使用border-radius不起作用 解决方案&#xff1a;最外层父盒子假如叫A添加 background为border-image的值&#xff0c;以及添加 boder-radius。 再添加一层父盒子假如叫B 添加padding值为border的宽度。 C和D都是子盒子 单独设置其border-…

展厅显示大屏怎么选,展厅使用哪种显示大屏好?

近年来&#xff0c;随着信息化科技快速发展&#xff0c;越来越多的企事业单位的展厅都会采用显示大屏来展现各种信息。那么&#xff0c;展厅显示大屏怎么选&#xff0c;哪种显示大屏更好&#xff1f;接下来&#xff0c;小灰从专业角度&#xff0c;用通俗易懂的文字为大家逐一分…

视频集中存储/云存储/磁盘阵列EasyCVR平台分组批量绑定/取消设备功能详解

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台视频能力丰富灵活&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备传…

打造低碳社区,践行环保理念

在城市内推行低碳经济&#xff0c;实现城市的低碳排放&#xff0c;甚至是零碳排放。而社区的结构是城市结构的细胞&#xff0c;社区结构与密度对城市能源及二氧化碳排放起了关键的作用。所以要想实现低碳城市建设&#xff0c;改变原有能源结构&#xff0c;改造低碳社区是第一大…

第 2 章 线性表 (线性表的单链表存储结构实现)

1. 背景说明 2. 示例代码 1) status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H/* 函数结果状态码 */ #define TRUE 1 /* 返回值为真 */ #define FALSE 0 /* 返回值为假 */ #define RET_OK 0 /* 返回值正确 */ #d…

武汉凯迪正大—接触电阻测试仪器

一、凯迪正大智能回路电阻测试仪产品概述 KDHL-100A操作面板采用人体工学设计&#xff0c;符合操作习惯&#xff0c;采用高频开关电源和数字电路技术&#xff0c;适用于开关控制设备回路电阻的测量。测试电流采用国家标准推荐的直流100A。可在直流100A的情况下直接测得回路电阻…