最具体和最简单的PDAL库配置及在VS2019上测试

本文介绍了如何利用PDAL库处理LiDAR的LAS格式数据,并通过C++代码展示了从LAS文件读取点云数据并使用PCL库进行可视化的步骤。首先,详细说明了下载和配置PDAL库的过程,包括添加环境变量和VS2019的属性表设置。然后,提供了一个测试代码示例,演示了从LAS文件读取点云信息并将其转换为PCL点云对象进行显示。最后,给出了代码运行的效果图。
摘要由CSDN通过智能技术生成

前言

libLAS 是一套用于处理常见的 “LAS” LiDAR 格式数据的 C/C++ 函数库。其中ASPRS LAS 格式 是一种 LiDAR 数据点云的序列二进制编码,可用于 LiDAR 传感器数据的存储和相应软件的交换、存档与处理。
  注:LiDAR(Light Detection and Ranging 光信号测距技术)是一种高精度的测距方法。其采用类似无线电雷达的原理,但采用激光信号实现。LiDAR 产生一种称为“点云”的产品,其中各个点代表反射信号源到传感器的距离。ASPRS LAS 是其产品的常见存储格式。
  基本原理如图1图1
但是截至2018年,libLAS项目已被PDAL项目取代,PDAL是是一个用于翻译和处理点云数据的 C/C++ 开源库和应用程序,用于点云数据的转换和处理。 尽管该库中许多工具的重点和发展都起源于激光雷达点云数据的处理,但它也不限于激光雷达数据。
用于点云数据的转换和处理。 尽管该库中许多工具的重点和发展都起源于激光雷达点云数据的处理,但它也不限于激光雷达数据。

最具体的方法

下载

1、下载OSGeo4W网络安装程序:https://trac.osgeo.org/osgeo4w/
在这里插入图片描述
2、按如下操作
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
注意这个Root Directory ,后面经常会用到
在这里插入图片描述
在这里插入图片描述
选择https://ftp.osuosl.org(其他的应该也可以,只是没测试)
在这里插入图片描述
搜索框输入pdal
在这里插入图片描述
点击skip,选中图中版本。
在同意各种协议后,耐心等待
在这里插入图片描述
最终结果
在这里插入图片描述

最简单的方法

直接下载我配置好的

链接:https://pan.baidu.com/s/1-vHXQB7_cfk_ZSBVkx_VSg
提取码:hqv0
–来自百度网盘超级会员V2的分享

CSDN:https://download.csdn.net/download/Dbojuedzw/87499764
典枢(不限速):
https://dianshudata.com/dataDetail/2445
点赞收藏评论我私发也行~

配置

添加环境变量

右击电脑属性——搜索编辑系统环境变量环境变量系统变量Path
添加Root Directory路径中的bin文件夹
例:
在这里插入图片描述

配置VS2019属性表

打开项目——属性
(1) VC++目录——包含目录——添加Root Directory下的include文件夹
(2) VC++目录——库目录——添加Root Directory下的lib文件夹
(3) 链接器——输入——附加依赖项添加如下文件

pdalcpp.lib
pdal_util.lib
libpdal_plugin_writer_pgpointcloud.lib
libpdal_plugin_reader_pgpointcloud.lib
libpdal_plugin_kernel_fauxplugin.lib
liblas_c.lib
liblas.lib
laszip3.lib

至此配置完成

测试代码(结合PCL库进行可视化)

#pragma execution_character_set("utf-8")//解决中文
#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); 
 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.offsetX();
 double offset_y = las_header.offsetY();
 double offset_z = las_header.offsetZ();

 //读点
 unsigned int n_features = las_header.pointCount();
 int count = 0;

 for (pdal::PointId id = 0; id < point_view->size(); ++id)
 {
  double x = point_view->getFieldAs<double>(pdal::Dimension::Id::X, id);
  double y = point_view->getFieldAs<double>(pdal::Dimension::Id::Y, id);
  double z = point_view->getFieldAs<double>(pdal::Dimension::Id::Z, id);
  double red = point_view->getFieldAs<double>(pdal::Dimension::Id::Red, id);
  double green = point_view->getFieldAs<double>(pdal::Dimension::Id::Green, id);
  double blue = point_view->getFieldAs<double>(pdal::Dimension::Id::Blue, id);
  double point_class = point_view->getFieldAs<double>(pdal::Dimension::Id::Classification, id);
  int r2, g2, b2;
  r2 = ceil(((float)red / 65536) * (float)256);
  g2 = ceil(((float)green / 65536) * (float)256);
  b2 = ceil(((float)blue / 65536) * (float)256);

  PointT point(x, y, z, r2, g2, b2);
  cloud0->push_back(point);
 }
}
int main()
{
 //
 pcl::PointCloud<PointT>::Ptr cloud0(new pcl::PointCloud<PointT>);
 ReadLas(cloud0, "C:\\Users\\Administrator\\Desktop\\LAS\\1.las");//换成自己的las文件
 //pcl::io::savePCDFile("1.pcd", *cloud0);
 //--------------------------------------可视化--------------------------
 pcl::visualization::PCLVisualizer viewer;
 viewer.addPointCloud(cloud0,  "cloud");
 viewer.addCoordinateSystem();


 while (!viewer.wasStopped())
 {
  viewer.spinOnce(100);
 }
 return 0;
}


效果如图

在这里插入图片描述

评论 57
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值