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

使用PCL读取PCD点云文件

在点云处理和三维视觉项目中,我们经常需要将点云数据保存到文件中,以便后续加载和分析。PCL(Point Cloud Library)提供了简单高效的接口来实现点云的读写操作。本文将通过一个完整的C++示例,介绍如何使用PCL读取 .pcd 格式的点云文件。
项目目标

本示例程序将完成以下任务:

1.定义一个点云对象。
2. 从本地磁盘加载一个已有的PCD文件。
3.打印点云的总点数。
4.输出每一个点的三维坐标。
5.验证读取结果。

#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{// 创建点云对象pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);//PCD文件名std::string filePCD = "output_Binary.pcd";//打开点云文件if (pcl::io::loadPCDFile<pcl::PointXYZ>(filePCD, *cloud) == -1){PCL_ERROR("Couldn't read file test_pcd.pcd \n");return (-1);}//打印输出点云数目std::cout << " Point Sizes:" << cloud->points.size() << std::endl;//打印输出所有点信息for (size_t i = 0; i < cloud->points.size(); ++i){std::cout << " Point:" << cloud->points[i] << std::endl;}std::cout << "Load Done!" << std::endl;std::system("pause");return 0;
}

结果:

Point Sizes:100Point:(7.17171,6.04464,9.34837)Point:(4.13291,1.15342,4.20713)Point:(9.16749,0.0795408,5.93188)Point:(6.08465,6.98442,1.00721)Point:(2.03303,7.29483,0.189448)Point:(7.29667,8.37866,2.05444)Point:(3.40005,7.28621,8.4185)Point:(3.40256,8.00413,7.22949)Point:(1.26972,6.29111,8.12108)Point:(2.95968,9.14912,8.47314)Point:(4.68325,6.32084,4.51779)Point:(4.03162,0.453743,5.67121)Point:(8.23875,9.62123,5.75075)Point:(4.17063,5.70588,2.73517)Point:(5.17784,7.73891,0.029993)Point:(5.36729,5.03558,8.40865)Point:(7.42173,8.43563,5.69486)Point:(5.84023,1.83819,3.69899)Point:(3.06972,3.10791,9.9901)Point:(1.1908,6.06758,9.13922)Point:(9.66395,0.750832,5.46006)Point:(4.18173,4.78245,5.9138)Point:(9.85294,3.0212,5.53504)Point:(5.60369,7.19183,1.24092)Point:(8.33886,2.36966,8.97983)Point:(8.36885,7.73695,4.01541)Point:(6.7775,5.15868,2.45104)Point:(2.47236,0.998908,4.28923)Point:(6.17135,4.06863,7.39714)Point:(6.16145,5.25943,3.46472)Point:(5.30067,4.92337,4.21555)Point:(0.760727,9.10511,8.998)Point:(6.67453,8.95805,2.0192)Point:(2.20956,4.56174,9.21103)Point:(3.45048,2.9006,1.58069)Point:(2.43031,1.26945,9.31765)Point:(6.44572,8.04696,4.47633)Point:(8.89676,0.519314,5.47523)Point:(3.186,6.69066,9.54386)Point:(0.583132,2.85211,4.80329)Point:(4.04785,8.15277,9.72667)Point:(8.2634,8.9135,8.83178)Point:(7.26141,5.58803,7.78983)Point:(9.28061,7.7976,2.35157)Point:(8.49164,1.24808,5.25218)Point:(0.0723317,3.67839,6.52163)Point:(9.38998,0.124114,4.56859)Point:(3.8663,9.02088,5.0879)Point:(9.34154,2.20688,1.77856)Point:(8.8854,2.79001,4.63067)Point:(3.68869,6.83786,2.78344)Point:(3.41536,5.10126,1.69694)Point:(2.24714,2.36267,7.28497)Point:(0.0369658,1.64328,5.08257)Point:(2.38854,0.134915,6.33065)Point:(7.64072,0.207247,0.00903809)Point:(4.16235,9.59722,0.133153)Point:(8.73093,3.46353,9.15403)Point:(3.81883,2.80506,1.36091)Point:(5.59739,1.69046,4.15092)Point:(0.22806,5.37916,0.988773)Point:(3.0115,8.79452,6.09003)Point:(4.70844,1.04165,8.4527)Point:(1.99342,1.07862,0.0959775)Point:(7.07598,3.46716,0.230893)Point:(3.40663,1.10787,0.43814)Point:(3.41567,5.27022,0.0353637)Point:(3.54882,4.00115,3.49889)Point:(2.70285,7.81998,6.30395)Point:(4.06376,3.41738,7.99441)Point:(8.21468,3.64544,3.37357)Point:(9.20345,6.65694,2.16809)Point:(5.29348,1.36538,3.20974)Point:(3.74618,3.3588,4.28836)Point:(3.84216,0.434781,7.75552)Point:(4.07305,3.84141,8.86339)Point:(4.51119,7.25708,4.13361)Point:(4.54656,0.805901,8.13476)Point:(8.04545,3.50875,5.95474)Point:(4.3494,7.57252,9.37212)Point:(2.34381,5.78719,3.01756)Point:(5.71738,4.99064,9.67449)Point:(7.88547,0.284124,1.03987)Point:(1.09521,4.03031,4.39867)Point:(5.38357,7.87247,4.83345)Point:(3.13909,1.94552,8.67486)Point:(2.00247,6.45672,5.93194)Point:(6.13608,1.00328,6.73784)Point:(4.27084,9.04872,0.2466)Point:(0.225587,3.39812,7.81911)Point:(9.59771,5.74194,3.60631)Point:(2.61526,1.45932,8.59695)Point:(2.28976,9.34479,8.88107)Point:(3.32963,0.440001,2.91138)Point:(7.7283,5.82357,0.783849)Point:(2.56176,8.96266,2.72937)Point:(1.23662,0.96513,9.18609)Point:(7.16856,7.10121,0.189364)Point:(3.90641,1.37206,9.23809)Point:(4.15301,1.59764,2.63621)
Load Done!

注意事项

文件路径:确保PCD文件路径正确。可以使用绝对路径避免问题。
点类型匹配:PCD文件中存储的点类型必须与代码中指定的模板类型一致(如 PointXYZ)。
格式兼容性:loadPCDFile 可自动读取ASCII和Binary格式的PCD文件,无需区分。
错误处理:始终检查 loadPCDFile 的返回值,防止程序因文件缺失而崩溃。

总结

通过 pcl::io::loadPCDFile,我们可以非常方便地将磁盘中的点云数据加载到内存中,为后续的滤波、配准、分割等处理打下基础。本文示例展示了完整的读取流程,是PCL开发中最基础也是最重要的操作之一。

掌握点云的读写,是开启三维点云处理之旅的第一步。

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

相关文章:

  • Pandas 数据处理核心操作:合并、替换、统计与分组
  • 分贝单位全指南:从 dB 到 dBm、dBc
  • 深入解析EventPoller:Disruptor的轮询式事件处理机制
  • k8s笔记01
  • 服务器硬盘进行分区和挂载
  • SLAM文献之-Globally Consistent and Tightly Coupled 3D LiDAR Inertial Mapping
  • AI +金融 = 七大核心维度+ 落地典型困难
  • 【Golang实战】Go Module 双段 require 配置深度解析
  • Lecture 5 GPUs课程笔记
  • C语言---编译的最小单位---令牌(Token)
  • 认识Node.js及其与 Nginx 前端项目区别
  • KubeBlocks AI:AI时代的云原生数据库运维探索
  • Notepad++批量转UTF-8脚本
  • Flink Stream API - 顶层Operator接口StreamOperator源码超详细讲解
  • 结合SAT-3D,运动+饮食双重养腰新方式
  • Java:将视频上传到腾讯云并通过腾讯云点播播放
  • STM32F407VGT6从零建立一个标准库工程模板+VSCode或Keil5
  • 详解MySQL中的多表查询:多表查询分类讲解、七种JOIN操作的实现
  • 《Linux运维总结:Shell脚本位置参数的具体使用》
  • 【笔记】动手学Ollama 第五章 Ollama 在 LangChain 中的使用 - Python 集成
  • 存储系统中清空日志文件的常用方法总结
  • vue3 el-select 默认选中第一个
  • 链表-24.两两交换链表中的结点-力扣(LeetCode)
  • 绕过 C 标准库限制执行系统命令:系统调用、Shellcode 和裸机二进制
  • 税务专业人员能力构建与发展路径指南
  • Qt5多线程编程详细讲解
  • [递归回溯]679. 24 点游戏
  • 基于RK3568/J6412的EMU多网口控制主机,助力储能工业互联管理和运维
  • PyTorch 社区贡献 和 设计原则
  • 第5课_Rust生命周期和泛型