点云库PCL的使用

相关头文件:

#include <pcl/io/io.h>
#include <pcl/point_types.h>

声明和定义点云对象:

pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ptr(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>& cloud = *cloud_ptr;

// 更简洁写法
using MyPoint = pcl::PointXYZ;
using MyCloud = pcl::PointCloud<MyPoint>;
using MyCloudPtr = CLOUD::Ptr;

初始化点云数据PCD文件头:

cloud.width = 30720;
cloud.height = 1;
cloud.is_dense = false;
cloud.points.resize(cloud.width * cloud.height);
pcl::PointXYZRGB color_point;
for (size_t i = 0; i < cloud.points.size(); ++i) {
    cloud.points[i].x = color_point.x;
    cloud.points[i].y = color_point.y;
    cloud.points[i].z = color_point.z;
    cloud.points[i].rgb = color_point.rgb;
}

cloud.height用来判断是否为有序点云,=1则是无序点云也可以使用如下函数代替:if (!cloud.isOrganized ()),对于无序点云来说:width就是指点云中点的个数,对于有结构点云来说:width是指点云数据集一行上点的个数,立体相机或者TOF相机获得的点云数据就属于这一类。对于有结构点云的一大好处就是能知道点云中点的相邻关系,最近邻操作效率就非常高,可以大大提高PCL中相应算法的效率。但是结构点云经过某些人为操作后,会变为无结构点云,比如滤波操作等。
例如:有结构点云

cloud.width = 640; // Image-like organized structure, with 640 rows and 480 columns,

cloud.height = 480; // thus 640*480=307200 points total in the dataset

无结构点云

cloud.width = 307200;

cloud.height = 1; // unorganized point cloud dataset with 307200 points

cloud.is_dense (bool)  判断points中的数据是否是有限的(有限为true)或者说是判断点云中的点是否包含 Inf/NaN这种值(包含为false)。

points存储了数据类型为PointT的一个动态数组,例如,对于一个包含了XYZ数据的点云,points是包含了元素为pcl::PointXYZ一个vector。 相当于vector<point3f>

可视化pcd文件:

sudo apt install pcl-tools
pcl_viewer file_name.pcd

pcl_viewer窗口操作的快捷键 

p,P: switch to a point-based representation(以点为基准展示) 

w,W: switch to a wireframe-based representation (where available)(以线框为基准展示)

s,S: switch to a surface-based representation (where available)(以平面为基准展示)

j,J: take a .PNG snapshot of the current window view(将当前窗口截图为png格式,保存在bin目录下的Debug或者Release目录下)

c,C: display current camera/window parameters(显示当前相机参数)

+/-: increment/decrement overall point size(放大或缩小当前所有点的尺寸)

g,G: display scale grid (on/off)(开启标尺)

u,U: display lookup table (on/off)(开启colorbar)

r,R: [+ ALT]: reset camera [to viewpoint = {0, 0, 0} -> center_{x, y, z}](将相机平移到某个位置)

ALT + s,S: turn stereo mode on/off(打开立体模式)

ALT + f,F: switch between maximized
PCL学习教程是关于点云Point Cloud Library)的教程,该可以用于处理和分析来自传感器的三维点云数据。学习PCL的教程通常包括以下内容: 1. 安装PCL:首先,你需要安装PCL及其依赖项。具体的安装方法可以参考PCL官方网站上的文档。 2. 点云数据的读取和可视化:学习如何读取和可视化点云数据是PCL学习的第一步。使用PCL提供的函数和类,你可以读取来自传感器的点云数据,并将其可视化以便观察和分析。 3. 点云滤波:PCL提供了各种滤波器,用于去除点云中的噪声、采样和下采样,以及提取感兴趣的特征。 4. 特征提取:学习如何从点云中提取表面特征,例如平面、曲率、法线等。 5. 点云配准:点云配准是将多个点云对齐到一个共同的坐标系中的过程。PCL提供了各种配准算法,包括ICP(迭代最近点)和SAC-IA(随机一致性),用于实现点云的配准。 6. 点云分割:点云分割是将点云分成多个不同的部分或对象的过程。PCL提供了各种分割算法,例如基于颜色、法线、平面模型等的分割算法。 7. 点云配准和分割的应用:学习如何将点云配准和分割应用于实际问题,例如机器人导航、三维重建和目标检测等。 在学习PCL时,你可以通过阅读PCL官方文档、实践示例代码和参加相关培训课程等方式来深入了解和掌握PCL使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值