当前位置: 首页 > java >正文

点云保存为pcd的一个例子

这段代码是一个简单的PCL(Point Cloud Library)示例,用于创建一个点云并将其保存为PCD文件。以下是代码的逐行解释:

1. 创建点云对象

pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
  • pcl::PointCloud<pcl::PointXYZ> 是PCL中定义的一个模板类,用于存储点云数据。pcl::PointXYZ 是点云中每个点的数据类型,表示3D空间中的点,包含xyz三个浮点坐标。
  • ::Ptr 是PCL中定义的一个智能指针类型,用于管理动态分配的点云对象,避免手动管理内存。
  • new pcl::PointCloud<pcl::PointXYZ> 动态分配了一个点云对象,并将其地址赋给智能指针cloud

2. 设置点云的属性

cloud->width = 5;
cloud->height = 1;
cloud->is_dense = false;
  • widthheight 定义了点云的尺寸。在这个例子中,点云是一个宽度为5、高度为1的二维点云(即一行5个点)。
  • is_dense 是一个布尔值,表示点云是否是密集的。如果点云中没有无效点(如NaN值),则可以设置为true。这里设置为false,表示点云可能包含无效点。

3. 调整点云的大小

cloud->points.resize(cloud->width * cloud->height);
  • points 是点云中存储所有点的容器(std::vector)。通过调用resize()方法,将其大小调整为width * height,即点云的总点数(在这个例子中是5个点)。

4. 填充点云数据

for (size_t i = 0; i < cloud->points.size(); ++i) {cloud->points[i].x = 512.0f * rand() / (RAND_MAX + 1.0f);cloud->points[i].y = 1024.0f * rand() / (RAND_MAX + 1.0f);cloud->points[i].z = 1024.0f * rand() / (RAND_MAX + 1.0f);
}
  • 这段代码通过循环为每个点的xyz坐标赋值。
  • rand() 是C++标准库中的随机数生成函数,返回一个[0, RAND_MAX]范围内的随机整数。
  • 通过rand() / (RAND_MAX + 1.0f)将随机数归一化到[0, 1)范围,然后乘以相应的系数(512.0f1024.0f),为点云生成随机的3D坐标。

5. 保存点云到PCD文件

pcl::io::savePCDFileASCII("E:/temp/temptest.pcd", *cloud);
  • pcl::io::savePCDFileASCII 是PCL提供的函数,用于将点云保存为ASCII格式的PCD文件。
  • 参数1是文件路径("E:/temp/temptest.pcd"),表示保存的文件名和路径。
  • 参数2是点云对象(*cloud),注意这里解引用了智能指针cloud,将实际的点云对象传递给函数。

总结

这段代码的功能是:

  1. 创建一个包含5个点的点云。
  2. 为每个点随机生成xyz坐标。
  3. 将生成的点云保存为ASCII格式的PCD文件(E:/temp/temptest.pcd)。

你可以使用PCL的可视化工具(如pcl_viewer)打开生成的PCD文件,查看点云的可视化效果。

http://www.xdnf.cn/news/9622.html

相关文章:

  • 微前端架构设计与实战示例
  • 嵌入式仿真平台如何重塑I²C协议教学:以AT24C02实验为例
  • linux——TCP问题
  • 自举升压方法
  • 高通滤波和低通滤波
  • Wi-Fi 6E/7法规认证的要求
  • AAOS系列之(五) ---CarPowerService 电源管理模块分析
  • ros2--串口通信
  • Lesson 9 防火墙 iptables 和 firewalld
  • SpringBoot 自动装配原理深度解析:从源码到实践
  • csdn_export_md
  • Linux特殊符号
  • Linux下挂载目录如何进行操作
  • C# Datatable筛选过滤各方式详解
  • PCI SSC推出PIN合规服务商列表计划
  • WES(一)——文件准备
  • 机器学习:线性回归、损失函数、导数、偏导
  • 主题阅读输出-关于成年/成熟的认识-01-学习
  • vue3 项目运行 加载 白屏
  • 嵌入式JPEG图像加水印实战技巧
  • 自我觉察是成长的第一步,如何构建内心的平静
  • 仿真每日一练 | ABAQUS水滴入水分析
  • SWMM+HTWATER最新水文水动力模型应用
  • linux版本vmware修改ubuntu虚拟机为桥接模式
  • STM32:ESP8266 + MQTT 云端与报文全解析
  • 微信小程序关于截图、录屏拦截
  • 通义实验室开源针对RAG的预训练框架
  • P1923 【深基9.例4】求第 k 小的数
  • Sentinel限流熔断机制实战
  • 软件测试计划中时间与资源的估算