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

@[TOC]PCL中点云特征描述与提取模块的学习

学习背景

参考书籍:《点云库PCL从入门到精通》以及官方代码PCL官方代码链接,PCL版本为1.10.0,CMake版本为3.16。18.06环境下也可使用。

学习内容

估计点云中每个点的法向量

源代码及所用函数

源代码

//法线估计实例
#include<pcl/io/io.h>
#include<pcl/io/pcd_io.h>
#include<pcl/features/integral_image_normal.h>//法线估计类头文件
#include<pcl/visualization/cloud_viewer.h>
#include<pcl/point_types.h>
#include<pcl/features/normal_3d.h>

//主函数
int main(int argc,char** argv)
{
    //打开点云文件
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::io::loadPCDFile("/home/jojo/PointCloud/PCLB/Features/01/table_400.pcd",*cloud);

    /*创建法线估计向量*/
    //这行表示一个输入点类型为 pcl::PointXYZ,输出法向量类型为 pcl::Normal 的法向量估计器。
    //pcl::PointXYZ 是输入点云的点类型,表示每个点只包含 x、y、z 三个坐标值。
    //pcl::Normal 是输出法向量的类型,表示每个法向量由 x、y、z 三个浮点数分量表示。
    pcl::NormalEstimation<pcl::PointXYZ,pcl::Normal> ne;
    ne.setInputCloud(cloud);

    /*创建法向量估计对象后,需要对其进行配置*/
    //创建一个空的KdTree对象,并把它传递给法线估计向量
    //基于给出的输入数据集,KdTree将被建立
    pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);
    ne.setSearchMethod(tree);//设置邻域搜索方法: 

    //存储输出数据
    pcl::PointCloud<pcl::Normal>::Ptr cloud_normals(new pcl::PointCloud<pcl::Normal>);
    
    //使用半径在查询点周围3厘米范围内的所有临近元素
    ne.setRadiusSearch(0.03);

    //计算特征值
    ne.compute(*cloud_normals);

    //将法向量显示出来
    pcl::visualization::PCLVisualizer viewer("PCL Viewer");
    viewer.setBackgroundColor(0,0,0);

    //viewer.addPointCloudNormals() 是 PCL (Point Cloud Library) 中的一个函数,用于在可视化窗口中显示点云及其法线信息。
    //<pcl::PointXYZ,pcl::Normal> 是函数模板参数,指定了点云数据类型为 pcl::PointXYZ(包含 x、y、z 坐标的点)
    //以及法线数据类型为 pcl::Normal(包含法线 x、y、z 分量的结构体)
    //cloud参数表示需要添加法线信息的点云,cloud_normals参数表示将法线信息存储到此点云中
    viewer.addPointCloudNormals<pcl::PointXYZ,pcl::Normal>(cloud,cloud_normals);
    while(!viewer.wasStopped())
    {
        viewer.spinOnce();
    }
    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.16 FATAL_ERROR)#指定CMake的最低版本要求为3.16
project(normal_estimation)#设置项目名称
find_package(PCL 1.10 REQUIRED)#查找PCL库,要求版本为1.7或更高。
include_directories(KaTeX parse error: Expected 'EOF', got '#' at position 20: …_INCLUDE_DIRS})#̲将PCL库的头文件目录添加到包…{PCL_LIBRARY_DIRS})#将PCL库的库文件目录添加到链接器搜索路径中。
add_definitions(${PCL_DEFINITIONS})#添加PCL库的编译器定义
add_executable (normal_estimation normal_estimation.cpp)
target_link_libraries (normal_estimation ${PCL_LIBRARIES})#将PCL库链接到可执行文件目标。

运行结果

在这里插入图片描述

函数

补充内容

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值