las格式点云数据使用详解(附VS编译好的LAStools工具)

目录

前言

las格式规范

VS中配置LAStools

VS2022中读取las数据示例


前言

LAS(Laser File Format)是一种专门为三维点云数据设计的文件格式,由美国摄影测量和遥感协会(American Society for Photogrammetry and Remote Sensing,ASPRS)管理和维护。

LAS 文件格式采用二进制存储,可以保存激光点的三维坐标、强度、回波、RGB、扫描角等多种信息,是目前最为广泛使用的点云数据格式。LAZ 文件格式是 LAS 的无损压缩版本。

对于较为直观的ASCII文件,其存在数据读取效率慢的问题。

本文主要从las格式点云数据的读取和重要的数据信息入手,快速学习las格式点云数据的使用。

如有兴趣全面了解las格式,请参考官方文件:LAS_1_4_r14.pdf

las格式规范

las文件主要包含一个公共文件头和点的坐标、颜色等信息。公共文件头中较为重要的信息为:点数量(number_of_point_records)、偏移量(offset)、尺度因子(scale_factor)等。点的信息为:x,y,z,R,G,B等。

las文件中,其存储的点云坐标数据为整数形式,通过尺度因子将整数坐标转换为实际的浮点型坐标,这样可以高效存储和精确表示坐标值。

实际坐标值=(存储的整数值 * 尺度因子)+ 偏移量

注:通过开源的LAStools工具读取出来的坐标是实际的浮点型坐标。

VS中配置LAStools

 LAStools是一款处理las格式点云数据的开源工具,它可以实现las格式点云数据的读写、滤波、分析等操作。本部分主要讲解如何将已编译好的LAStools配置到VS2022中,有需要下载已编译好的LAStools工具的可自行下载,我已经上传了资源。

解压文件后目录结构如下:

vs2022中新建项目,打开项目属性,依次如下图所示设置:

注: Debug模式下附加依赖项添加的是LASlibD.lib,Release模式下添加的是LASlib.lib

以上配置完成后,就可以在VS中通过代码读取las文件数据了。 

VS2022中读取las数据示例

 示例代码如下,已对代码进行了注释。

#include<iostream>

#include "lasreader.hpp"
using namespace std;

int main()
{
	string file_path("E:\\1.las");
	LASreadOpener lasreadopener;
	lasreadopener.set_file_name(file_path.c_str());
	LASreader* lasreader = lasreadopener.open();

	cout << "输出las文件的公共文件头信息" << endl;

	cout << lasreader->header.number_of_point_records << endl;    / 点数量
	cout << lasreader->header.x_offset << endl;        / x坐标的偏移量
	cout << lasreader->header.y_offset << endl;        / y坐标的偏移量
	cout << lasreader->header.z_offset << endl;        / z坐标的偏移量
	cout << lasreader->header.x_scale_factor << endl;    / x坐标的尺度因子
	cout << lasreader->header.y_scale_factor << endl;    / y坐标的尺度因子
	cout << lasreader->header.z_scale_factor << endl;    / z坐标的尺度因子

    / 点的坐标信息、颜色信息
	lasreader->read_point();
    / 将颜色换算为了0-255的标准形式
	cout << "R:" << lasreader->point.get_R() * 255 / 65535 
		<< "G:" << lasreader->point.get_G() * 255 / 65535 
		<< "B:" << lasreader->point.get_B() * 255 / 65535 << endl;
	cout << "X:" << lasreader->point.get_x() << "Y:" << lasreader->point.get_y()
		<< "Z:" << lasreader->point.get_z() << endl;
}

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想躺平的点云工程师

感谢各位看官!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值