如何在c++中用pcl写入一个pcd文件

it2026-04-02  7

pcl学习的第一个小程序:写入一个PCD文件

我手里有一本《点云库PCL学习教程》,这个样子。 翻看了第一章,就是配置pcl,我电脑装的是pcl1.11。现在用起来也没什么不妥。配置的话花了一点时间,主要就是网上查查查,按照步骤一步一步的做,就成功了。不懂的话可以留言,我以后在写一个专门讲怎么配置的博客。 这本书讲的太不行了,就是网站文档的简单翻译,而且代码排版,缩进都有问题,看了非常不舒服,错误也很多。最后没办法,我就上的网站直接阅读的代码文档。pcl文档描述英文版 这个写的比较详细,还有代码演示。就是英语不好的人看起来比较费劲。好在我们有翻译~接下来进入正题。 这是官网给的代码

然而并没有注释,非常头疼,好在文档下面给了一点代码的解释,但是对于一个初学者来说,甚至是刚开始学习c++的人来说,冗长的代码非常不友善,于是我对照着每一个代码,每一行每一行的理解。我认为这个是非常必要的,先把简单的代码理解透彻,就像代码中总是出现的结构 “pcl::PoinCloud” 、“pcl: :P【ointXYZ" 诸如此类的一定要多看几遍多写几遍,这样看多了以后就不会头疼了。下面附上我写的代码

#include<iostream> //标准头文件 #include<pcl/io/pcd_io.h> // 写入函数loadPCDFile需要此头文件 #include<pcl/point_types.h> // PointXYZ的定义需要此头文件 int main() { pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); //创建一个指针cloud变量用来存储我读入的点云数据,直接创建cloud也可以,亲测有效。 if(pcl::io::loadPCDFile("test_pcd.pcd", *cloud) == -1) //pcl下io这个类下的loadPCDFile函数是读取名为引号中名字的函数,然后将其存入cloud中。这个函数有个返回值,如果读到的话就是0,否则返回-1,因此这条语句用来判断是否读到数据。 { std::cout << "加载不到该点云数据" << std::endl;//读不到数据就打印词条命令 } else { std::cout << "一共有" << cloud->width * cloud->height << "个数据" << std::endl;//cloud是指针性,因此读取该类型下的数据需要用箭头。cloud是保存的读到的点云整体数据,他有width、height、is_dense等参数。 for (auto & point : *cloud)//这条语句非常有趣,简化版的循环,就是打印cloud中每一个点的数据。用point来代替cloud进行打印。不习惯这样或者用cloud->point[i].x也可以打印 std::cout << point.x << " " << point.y << " " << point.z << std::endl;//长乘高是总点云个数,point.x就是第i个点x的坐标,以此类推 } return 0; }

最后的结果如图我有反反复复把这个代码敲了好多遍,每次都不能全写对,一是对很多形式不熟悉,二是对代码很生疏,因此还是要加强c++结构体 类 继承等方面的学习,多写几遍就会了。这基础非常重要,可能以后都不会用到这个程序,但是养成一个好的习惯和打好基础是非常重要的。 要是对上面代码还有不懂的可以直接评论,看到都会回,希望和大家一起进步。好了,继续搬砖了。 最后解释几个东西:

最新回复(0)