学习笔记:pdal读取.las文件(将las数据读取成XYZRGB格式)//las转txt
本着对c++里一些库的学习态度,整理了一下在实际工程项目中写下的代码分享给用得到的人;有不对的地方希望指正,勿喷。
pdal可以读取.las数据中的详细信息;由于本人只用到点云的xyzrgb信息,故将.las直接转换成:
pcl::PointCloud<PointXYZRGB>
读取数据用到了pdal库,写入数据用到了pcl库!
一、pdal是什么?
PDAL是点云数据处理的库。这是一个C/C++开源库,用于点云数据的转换和处理。尽管该库中许多工具的重点和发展都起源于激光雷达点云数据的处理,但它也不限于激光雷达数据。一个简单的PDAL点云处理流程,由读文件、滤波模块和写点云模块组成。这里我们只用到点云的读取部分!
二、使用步骤
1.代码
我这里将读取las数据的功能打包成了一个函数;函数里面的代码是可以直接写在主函数里的。
#include <pdal/Options.hpp>
#include <pdal/io/LasHeader.hpp>
#include <pdal/io/LasReader.hpp>
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
typedef pcl::PointXYZRGB PointT;
//Las2Pointxyzrgb
void ReadLas(pcl::PointCloud<PointT>::Ptr& cloud0, std::string filename) {
pdal::Option las_opt("filename", filename); //参数1:"filename"(键)
pdal::Options las_opts;
las_opts.add(las_opt);
pdal::LasReader las_reader;
pdal::PointTable table;
las_reader.setOptions(las_opts);
las_reader.prepare(table);
pdal::PointViewSet point_view_set = las_reader.execute(table);
pdal::PointViewPtr point_view = *point_view_set.begin();
pdal::LasHeader las_header = las_reader.header();
//头文件信息
unsigned int PointCount = las_header.pointCount();
double scale_x = las_header.scaleX();
double scale_y = las_header.scaleY();
double scale_z = las_header.scaleZ();
double offset_x = las_header.