Win系统下配置PCL库第四步之LASlib文件配置(超详细)
是 Martin Isenburg 编写的的核心 C++ 库,专门用于。LAS 是 ASPRS(美国摄影测量与遥感学会)定义的标准点云格式,广泛应用于数据存储。LAZ 是 LAS 的压缩格式(体积更小)。LASlib 主要功能:高效读取大规模 LAS/LAZ 文件(逐点读取,支持流式处理,避免内存溢出)支持(可保存点云到标准 LAS/LAZ 格式)自动处理等元信息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); // RGB
colors->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-1
unsigned 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库。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)