关于PCL部分的配置我就不加赘述了,本篇主要讲las文件的读取
这里附上已经编译好了的库
链接:https://pan.baidu.com/s/1ZPYNOWXQnhu2-bTHihjxpA
提取码:CSXC
首先需要下载liblas的库
在PCL项目中属性-》配置属性-》VC++目录中配置:
在包含目录中包含该include
在库目录中引用lib
在PCL项目中属性-》配置属性-》链接器-》输入
附加依赖项中配置
到这里,关于laslib库的配置就已经完成了。现在将以下代码粘贴到.cpp文件中
#pragma warning(disable:4996)
#include <pcl\io\pcd_io.h>
#include <pcl\point_cloud.h>
#include <pcl\point_types.h>
#include <pcl\visualization\pcl_visualizer.h>
#include <liblas/liblas.hpp>
#include <iostream>
using namespace std;
void main()
{
std::ifstream ifs("C:\\Users\\17616\\Documents\\Visual Studio 2015\\Projects\\PCLVisualizerOfficial\\5\\source\\ground.las", std::ios::in | std::ios::binary); // 打开las文件
liblas::ReaderFactory f;
liblas::Reader reader = f.CreateWithStream(ifs); // 读取las文件
// qDebug() << "读取";
unsigned long int nbPoints = reader.GetHeader().GetPointRecordsCount();//获取las数据点的个数
// qDebug() << "获取点数量" << nbPoints;
pcl::PointCloud<pcl::PointXYZRGB> cloud1;
cloud1.width = nbPoints; //保证与las数据点的个数一致
cloud1.height = 1;
cloud1.is_dense = false;
cloud1.points.resize(cloud1.width * cloud1.height);
int i = 0;
uint16_t r1, g1, b1;
int r2, g2, b2;
uint32_t rgb;
// qDebug() << "开始加载点";
while (reader.ReadNextPoint())
{
// 获取las数据的x,y,z信息
cloud1.points[i].x = (reader.GetPoint().GetX());
cloud1.points[i].y = (reader.GetPoint().GetY());
cloud1.points[i].z = (reader.GetPoint().GetZ());
}
// qDebug() << "加载点完成";
//到这里cloud1就已经完全加载了las的数据。也可以创建viewer来显示点云。这里我将las文件转换为pcd文件保存
pcl::io::savePCDFileASCII("pointcloud.pcd", cloud1);//存储为pcd类型文件
// qDebug() << "导出pcd";
}