Ubuntu 20.04.06 PCL C++学习记录(十九)

@[TOC]PCL中点云分割模块的学习

学习背景

参考书籍:《点云库PCL从入门到精通》以及官方代码PCL官方代码链接,,PCL版本为1.10.0,CMake版本为3.16

学习内容

源代码及所用函数

源代码

#include<iostream>
#include<vector>
#include<pcl/point_types.h>
#include<pcl/io/pcd_io.h>
#include<pcl/search/search.h>
#include<pcl/search/kdtree.h>
#include<pcl/features/normal_3d.h>
#include<pcl/visualization/cloud_viewer.h>
#include<pcl/filters/filter_indices.h>
#include<pcl/segmentation/region_growing.h>

int main(int argc,char** argv)
{
    /*********************************读取点云文件**************************************************/
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    if (pcl::io::loadPCDFile("/home/jojo/PointCloud/table_400.pcd",*cloud) == -1)
    {
        std::cout << "没有找到文件" << std::endl;
        return -1;
    }
    /*****************************************计算表面法线****************************************/
    pcl::search::Search<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);
    pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);
    pcl::NormalEstimation<pcl::PointXYZ,pcl::Normal> normal_estimator;
    normal_estimator.setSearchMethod(tree);
    normal_estimator.setInputCloud(cloud);
    normal_estimator.setKSearch(50);
    normal_estimator.compute(*normals);
    /******************************************从点云数据中移除 NaN 值*****************************/
    pcl::IndicesPtr indices(new std::vector<int>);
    pcl::removeNaNFromPointCloud(*cloud,*indices);
    /*******************************************设置区域生长算法**********************************/
    pcl::RegionGrowing<pcl::PointXYZ,pcl::Normal> reg;
    reg.setMinClusterSize(50);//设置最小簇的大小。
    reg.setMaxClusterSize(1000000);//设置最大簇的大小。
    reg.setSearchMethod(tree);//设置搜索方法    
    reg.setNumberOfNeighbours(30);//设置邻域点的数量。
    reg.setInputCloud(cloud);//设置输入点云。
    reg.setIndices(indices);//设置点云索引,指定要处理的点云子集
    reg.setInputNormals (normals);//设置输入点云的法向量
    reg.setSmoothnessThreshold(3.0/180.0*M_PI);//设置平滑度阈值,3.0 表示角度阈值为3度
    reg.setCurvatureThreshold(1.0);//设置曲率阈值

    std::vector<pcl::PointIndices> clusters;
    reg.extract(clusters);

    std::cout << "群集数等于" << clusters.size() << std::endl;
    std::cout << "第一个集群有 " << clusters[0].indices.size () << " 个点." << std::endl;
    std::cout << "这些是初始这些是初始点的指数" <<std::endl << "属于第一个群组的云:" <<std::endl;
    std::size_t counter = 0;
    while (counter < clusters[0].indices.size())
    {
        std::cout << clusters[0].indices[counter] << ", ";
        counter++;
        if (counter%10==0)
        {
            std::cout << std::endl;
        }
    }
    std::cout << std::endl;
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr colored_cloud = reg.getColoredCloud();
    pcl::visualization::CloudViewer viewer("Cluster Viewer");
    viewer.showCloud(colored_cloud);
    while(!viewer.wasStopped())
    {

    }
    return 0;   
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.16 FATAL_ERROR)#指定CMake的最低版本要求为3.16
project(project)#设置项目名称
find_package(PCL 1.10 REQUIRED)#查找PCL库,要求版本为1.10或更高。
include_directories(${PCL_INCLUDE_DIRS})#将PCL库的头文件目录添加到包含路径中
link_directories(${PCL_LIBRARY_DIRS})#将PCL库的库文件目录添加到链接器搜索路径中。
add_definitions(${PCL_DEFINITIONS})#添加PCL库的编译器定义
add_executable (region_growing_segmentation region_growing_segmentation.cpp)
target_link_libraries (region_growing_segmentation ${PCL_LIBRARIES})#将PCL库链接到可执行文件目标。


运行结果

在这里插入图片描述

函数

  • pcl::RegionGrowing 是 PCL 库中提供的一种区域生长分割算法,它根据点云的几何特征(如法向量、曲率等)将点云分割成不同的区域。

      pcl::PointXYZ:指定输入点云的类型为 pcl::PointXYZ,表示每个点包含 XYZ 坐标信息。
      pcl::Normal:指定点云的法向量类型为 pcl::Normal,表示每个点的法向量信息。
      
      setInputCloud:设置输入点云。
      setInputNormals:设置输入点云的法向量。
      setSearchMethod:设置搜索方法(如 KdTree)。
      setNumberOfNeighbours:设置邻域点的数量。
      setMinClusterSize:设置最小簇的大小。
      setMaxClusterSize:设置最大簇的大小。
      setSmoothnessThreshold:设置平滑度阈值。
      setCurvatureThreshold:设置曲率阈值。
    
  • reg.getColoredCloud()pcl::RegionGrowing 类的一个成员函数,它返回一个彩色点云。在 pcl::RegionGrowing 算法执行后,不同的区域会被赋予不同的伪随机颜色,以区分不同的簇或分割区域。

补充内容

  • pcl::search::Searchpcl::PointXYZ::Ptrpcl::search::KdTreepcl::PointXYZ::Ptr 区别

    1. pcl::search::Search<pcl::PointXYZ>::Ptr 是一个抽象基类指针,它定义了一组用于搜索点云数据的通用接口。这个基类本身不提供任何具体的实现,而是作为一个通用接口,允许其他具体的搜索算法类继承并实现它。
    2. pcl::search::KdTree<pcl::PointXYZ>::Ptr 是一个具体的搜索算法类指针,它实现了基于 K-D 树数据结构的搜索算法。K-D 树是一种用于存储和查找多维数据的树状数据结构,它能够高效地进行最近邻搜索和范围搜索等操作。

    简单来说,pcl::search::Search<pcl::PointXYZ>::Ptr 是一个通用的搜索接口,pcl::search::KdTree<pcl::PointXYZ>::Ptr 则是一种基于 K-D 树的具体搜索算法实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/526430.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

室内人员定位的几种方案

着物联网不断发展&#xff0c;人们对于室内位置的需求日益增多&#xff0c;室内人员定位管理的需求在很多企业中也纷纷尝试&#xff0c;通过数字化手段&#xff0c;对企业内部人员的信息、行为等进行实时监控、分析和管理。这种管理方式可以大大提高企业的管理效率&#xff0c;…

【CicadaPlayer】demuxer_service的简单理解

G:\CDN\all_players\CicadaPlayer-github-0.44\mediaPlayer\SMPMessageControllerListener.cppplayer的demuxer服务类 std::unique_ptr<demuxer_service> mDemuxerService{nullptr};根据option (Cicada::options),可以决定音视频的不同操作,通过 hander可以获得具体使…

CSS - 浮动、定位

浮动 CSS浮动&#xff08;Float&#xff09;是一种布局技术&#xff0c;用于控制元素在页面中的位置。通过将元素浮动到其容器的左侧或右侧&#xff0c;可以使其他元素环绕在其周围。 相关属性&#xff1a; float&#xff1a;用于设置元素的浮动方向。可以设置为left&#xf…

刷题之动态规划-子序列

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;开始刷动态规划的子序列类型相关的题目&#xff0c;子序列元素的相对位置和原序列的相对位置是一样的 动态规划5个步骤 状态表示 &#xff1a;dp数组中每一个下标对应值的含义是什么>dp[i]表示什么状态转移方程&#xf…

[工具使用]绕过付费-适用于谷歌/火狐/Edge浏览器

绕过付费-适用于谷歌/火狐/Edge浏览器 bypass-paywalls是一款浏览器插件&#xff0c;可以帮助绕过选定网站的付费 链接&#xff1a;https://github.com/iamadamdev/bypass-paywalls-chrome 一、谷歌/Edge浏览器安装说明&#xff08;支持自定义网站&#xff09; 1、从Github下…

Xinstall助力提升用户体验:一键打开App用户页面

在移动互联网时代&#xff0c;App已经成为我们日常生活中不可或缺的一部分。然而&#xff0c;随着App数量的激增&#xff0c;如何让用户更便捷地打开和使用App&#xff0c;提升用户体验&#xff0c;成为了开发者和广告主们亟待解决的问题。此时&#xff0c;Xinstall作为国内专业…

golang使用sse事件流调用AI大模型

目录 前言第一步 解决没有官方SDK的痛第二步 实现流式传输什么是SSE,SSE和WebSocket的区别基于gin实现SSE服务器gin接收AI大模型数据流响应1. 前端携带自定义问题请求后端接口2. 后端接受请求解析问题&#xff0c;然后创建stream对象3. 构建请求参数&#xff0c;调用创建数据流…

《CSS 知识点》仅在文本有省略号时添加 tip 信息

html <div ref"btns" class"btns"><div class"btn" >这是一段很短的文本.</div><div class"btn" >这是一段很短的文本.</div><div class"btn" >这是一段很长的文本.有省略号和tip.<…

ubuntu或类Debian获取某些包的离线版本-包括依赖(还有一些意想不到的用途,哈哈)

前言 偶尔能碰到很特殊的情况。网址白名单&#xff0c;纯内网&#xff0c;超多依赖及一些很难描述的场景。 比如一些少见的发行版缺少某些包。这时候可以找一台类似的系统环境来下载离线包及 其依赖包&#xff0c;然后转移到内网进行安装。如果是网址白名单&#xff0c;或者纯内…

AI的力量感受(附网址)

输入 科技感的 二维码&#xff0c;生成如下&#xff0c;还是可以的 输入金属感 的芯片&#xff0c;效果就很好了 金属感 打印机&#xff0c;细节丰富&#xff0c;丁达尔效应 就有点跑题了 金属感 扫码仪 还有点像 3D 封装长这样&#xff0c;跑题比较严重 总之&#xff0c;AI还…

yolov8安全帽检测项目开发(python开发,带有训练模型,可以重新训练,并有Pyqt5界面可视化)

不需要程序&#xff0c;只需要数据集的&#xff0c;想自己搭建模型训练的&#xff0c;可以免费下载&#xff08;积分已经设置为0&#xff09;&#xff1a;https://download.csdn.net/download/qq_40840797/89100918 1.项目介绍&#xff1a;&#xff08;视频运行链接&#xff1…

KMP刷leetcode速通

前言 KMP真厉害&#xff0c;刷题刷到 28.找出字符串中第一个匹配项的下标 和 1668.最大重复子字符串 next 数组用来匹配不上时&#xff0c;前缀 j j j 可以快速回退到 n e x t [ j − 1 ] next[j-1] next[j−1] 的位置。 void getNext(vector<int>& next, const…

我院组织《医务人员如何构建良好人际关系》主题讲座

为进一步规范医务人员行为&#xff0c;熟练运用沟通技巧&#xff0c;掌握沟通技能&#xff0c;更好的为患者服务&#xff0c;提高工作效率。3月7日&#xff0c;北京精诚博爱医院护理部特别邀请了原海军总医院心理科郭勇教授&#xff0c;为临床医务工作者作了《心理健康教育之医…

文本溢出隐藏用小点表示(多行溢出,单行溢出)

一、效果 文本溢出隐藏&#xff0c;用小点表示。 单行溢出隐藏&#xff1a; 规定第几行溢出隐藏&#xff1a; 二、代码 单行&#xff1a; <p class"p1">gdgFIAHfuiasdhgiubvsDIUGHSFUIGHGDFUIGUISDFHVUIJKDFDFUIKGJKGJKG</p> width: 200px; height:…

Docker 安装RabbitMQ以及使用客户端图形化界面

目录 一、点击进入docker 镜像仓库 1.1 直接在官网里 搜索 rabbitmq 1.2 在标签里 直接搜索3.10-management 因为这个标签包含用户操作界面 二、启动docker 2.1 首先拉取镜像&#xff1a; 2.2 Docker运行&#xff0c;并设置开机自启动 三、访问用户操作界面 一、点击进入…

项目经理要懂技术吗?

项目经理就好比乐团的指挥&#xff0c;指挥可能不需要精通每种乐器&#xff0c;但是指挥应该具备相应的音乐知识&#xff0c;对每种乐器有着自己的理解和经验&#xff0c;并且能够与乐队每个人进行专业上的沟通。而项目的专业性越强&#xff0c;对于项目经理的技术水平要求就越…

码住财务记账软件大揭秘!财务记账软件推荐指南

财务管理软件在现代企业管理中发挥着至关重要的作用。本篇文章将为大家介绍10款财务管理软件&#xff1a;Zoho Books、畅捷通T、速达财务软件、金税管家、QuickFile、Kashoo、AccountingSuite、Manager、金蝶KIS、Oracle NetSuite。 一、Zoho Books Zoho Books以其强大的功能…

Git-LFS 远程命令执行漏洞 CVE-2020-27955 漏洞复现

今天遇到了一个比较有意思的洞&#xff0c;复现一下下.......... 漏洞描述 Git LFS 是 Github 开发的一个 Git 的扩展&#xff0c;用于实现 Git 对大文件的支持 一些受影响的产品包括Git&#xff0c;GitHub CLI&#xff0c;GitHub Desktop&#xff0c;Visual Studio&#xff0…

Shoplazza闪耀Shoptalk 2024,新零售创新解决方案引领行业新篇章!

在近期举办的全球零售业瞩目盛事——Shoptalk 2024大会上,全球*的零售技术平台-店匠科技(Shoplazza)以其*的创新实力与前瞻的技术理念,成功吸引了与会者的广泛关注。此次盛会于3月17日至20日在拉斯维加斯曼德勒湾隆重举行,汇聚了逾万名行业精英。在这场零售业的盛大聚会上,Shop…

每日一题 第八十二期 CodeTON Round 8 (Div. 1 + Div. 2, Rated, Prizes!)

C1. Bessie’s Birthday Cake (Easy Version) time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard input output: standard output Proof Geometric Construction Can Solve All Love Affairs - manbo-p ⠀ This is the easy versio…