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

Win系统下配置PCL库第四步之LASlib文件配置(超详细)

LASlib 是 Martin Isenburg 编写的 LAStools 的核心 C++ 库,专门用于 LAS/LAZ 格式点云文件的读写。LAS 是 ASPRS(美国摄影测量与遥感学会)定义的标准点云格式,广泛应用于 LiDAR 激光雷达 数据存储。

LAZ 是 LAS 的压缩格式(体积更小)。

LASlib 主要功能:

  • 高效读取大规模 LAS/LAZ 文件(逐点读取,支持流式处理,避免内存溢出)

  • 支持 写入(可保存点云到标准 LAS/LAZ 格式)

  • 自动处理 坐标缩放、偏移、RGB、强度、回波次数、GPS 时间 等元信息

LASlib 在点云学习中的重要性,就像 OpenCV 之于图像学习,既是数据读写的工具,也是保证数据完整性和可交换性的标准化接口。紧接主题:

第一步:下载LASlib

下载地址:LAStools/LAStools: efficient tools for LiDAR processing

第二步:Cmake编译LASlib

下载之后,用Cmake打开:相较于VTK编译,这个简单很多,同样第二个依旧是选择编译后头文件的地址。

这里的CMAKE_INSTALL_PREFIX选项路径是保存生成的LASlib头文件的路径。自己可以给定。

依旧是Open Project,这里先生成12,12成功之后再生成45。

若是生成12存在问题,在这里的问题需要具体分析。

进入到刚才的路径可以看到头文件生成已经成功了。

第三步: 链接Laslib库

将下述的路径加入之前的pri文件。

这个路径下放了一些laz文件以供测试。

下面给出一段测试代码:

#include <QApplication>
#include <QSurfaceFormat>
#include <QVTKOpenGLStereoWidget.h>#include <vtkSmartPointer.h>
#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkPolyData.h>
#include <vtkPoints.h>
#include <vtkVertexGlyphFilter.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkUnsignedCharArray.h>
#include <vtkPointData.h>
#include <lasreader.hpp>
#include <iostream>
#include <limits>int main(int argc, char* argv[])
{QSurfaceFormat::setDefaultFormat(QVTKOpenGLStereoWidget::defaultFormat());QApplication app(argc, argv);QVTKOpenGLStereoWidget vtkWidget;vtkWidget.resize(1200, 800);auto renderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();auto renderer = vtkSmartPointer<vtkRenderer>::New();renderWindow->AddRenderer(renderer);vtkWidget.setRenderWindow(renderWindow);// ===== 读取 LAZ 文件 =====LASreadOpener opener;opener.set_file_name("D:\\PCL\\LAStools-master\\data\\house.laz");LASreader* lasreader = opener.open();cout<<(int)lasreader->header.number_of_point_records<<endl;if (!lasreader) {std::cerr << "Failed to open LAZ file!" << std::endl;return -1;}auto points = vtkSmartPointer<vtkPoints>::New();double z_min = std::numeric_limits<double>::max();double z_max = std::numeric_limits<double>::lowest();int point_count = 0;while (lasreader->read_point()) {double x = lasreader->point.get_X() * lasreader->header.x_scale_factor + lasreader->header.x_offset;double y = lasreader->point.get_Y() * lasreader->header.y_scale_factor + lasreader->header.y_offset;double z = lasreader->point.get_Z() * lasreader->header.z_scale_factor + lasreader->header.z_offset;if (!std::isfinite(x) || !std::isfinite(y) || !std::isfinite(z)) continue;points->InsertNextPoint(x, y, z);if (z < z_min) z_min = z;if (z > z_max) z_max = z;point_count++;}lasreader->close();delete lasreader;std::cout << "Loaded points: " << point_count << std::endl;auto polyData = vtkSmartPointer<vtkPolyData>::New();polyData->SetPoints(points);// ===== 高度映射颜色 =====auto colors = vtkSmartPointer<vtkUnsignedCharArray>::New();colors->SetNumberOfComponents(3); // RGBcolors->SetName("Colors");for (vtkIdType i = 0; i < points->GetNumberOfPoints(); i++) {double p[3];points->GetPoint(i, p);double ratio = (p[2] - z_min) / (z_max - z_min); // 归一化到0-1unsigned char r = static_cast<unsigned char>(ratio * 255);unsigned char g = static_cast<unsigned char>((1.0 - ratio) * 255);unsigned char b = 128; // 固定蓝色值,也可以动态映射colors->InsertNextTuple3(r,g,b);}polyData->GetPointData()->SetScalars(colors);// ===== VertexGlyphFilter 显示点 =====auto glyphFilter = vtkSmartPointer<vtkVertexGlyphFilter>::New();glyphFilter->SetInputData(polyData);glyphFilter->Update();auto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputConnection(glyphFilter->GetOutputPort());mapper->ScalarVisibilityOn(); // 启用颜色映射auto actor = vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);actor->GetProperty()->SetPointSize(2);renderer->AddActor(actor);renderer->SetBackground(0.0, 0.0, 0.0);renderer->ResetCamera();vtkWidget.show();return app.exec();
}

这里用的是"D:\\PCL\\LAStools-master\\data\\house.laz"

这样LAS库就配置好了。下一步就是系统的学习PCL库。


文章转载自:

http://vjhrvcr0.zmrbq.cn
http://hIXnIBU6.zmrbq.cn
http://YAlWSwCa.zmrbq.cn
http://Nm00vYPu.zmrbq.cn
http://e8Ky0U0v.zmrbq.cn
http://wc84GgSA.zmrbq.cn
http://gi1XZDQ2.zmrbq.cn
http://BaUbgZF7.zmrbq.cn
http://aPvrHLbs.zmrbq.cn
http://X3pFkFaH.zmrbq.cn
http://zjX6MwH0.zmrbq.cn
http://WQkSdKjV.zmrbq.cn
http://YfLNG1kl.zmrbq.cn
http://se1trYIp.zmrbq.cn
http://2UBu27Gf.zmrbq.cn
http://x0e9V9N9.zmrbq.cn
http://cTGf8Ffu.zmrbq.cn
http://gRurZXa3.zmrbq.cn
http://6pMue91s.zmrbq.cn
http://5yidRVcF.zmrbq.cn
http://mYvMQ04g.zmrbq.cn
http://3eb5dQXl.zmrbq.cn
http://tNWhu5nE.zmrbq.cn
http://OxCNqE3V.zmrbq.cn
http://CK5jEa18.zmrbq.cn
http://zaDx2wfo.zmrbq.cn
http://HiMy0tWy.zmrbq.cn
http://hhTiiHmQ.zmrbq.cn
http://QtTo5yjF.zmrbq.cn
http://3mBZKiu9.zmrbq.cn
http://www.dtcms.com/a/382189.html

相关文章:

  • 软考-局域网基础考点总结
  • Asio C++ Library是用来做什么的
  • 深度学习在智能车辆故障诊断中的应用
  • DeepFace 全面使用教程
  • ISP之DHCPv6-PD(前缀代理)为用户下发前缀
  • LINUX913 shell:set ip [lindex $argv 0],\r,send_user,spawn ssh root@ip “cat “
  • GEO 优化专家孟庆涛以 AI 技术建体系,赋能多行业智能化转型
  • 没有统一的知识管理平台会带来哪些问题
  • 系统编程day10-同步与互斥
  • Spring Boot 整合 Mockito 进行单元测试
  • 【C++】C++11介绍(Ⅱ)
  • HTML新属性
  • 分库分表是否真的要退出历史舞台?
  • [BJ2012.X4] 统计车牌
  • 【Rust】一个从Modelscope下载模型CLI工具
  • 第三方服务商接入美团核销接口:零侵入对接的关键要点
  • 电压监控器原理
  • python面向对象的三大特性
  • 从 MySQL 到 TiDB:分布式数据库的无缝迁移与实战指南
  • Ansible的jinja2 模板、Roles角色详解
  • Linux内核的PER_CPU机制
  • 树莓派组建nas,云服务器及家庭影院
  • 二叉树hot100-中等
  • MX 模拟赛二总结
  • windows rocketmq 启动时报 java.lang.NullPointerException
  • 文本处理三剑客——grep、sed、awk
  • o2oa待办流程和已办流程表
  • 【WebSocket✨】入门之旅(三):WebSocket 的实战应用
  • 闪电科创-交通信号灯仿真SUMO
  • 【自动化】深入浅出UIAutomationClient:C#桌面自动化实战指南