使用liblas库读写las文件c++代码

更新时间:2023-06-09 00:04:28 阅读: 评论:0

使⽤liblas库读写las⽂件c++代码需要包含的头⽂件包括
//标准c++
#include<string>
//liblas库
#include<liblas/liblas.hpp>
#include<liblas/point.hpp>
#include<liblas/version.hpp>
//pcl库
黄桃罐头的做法#include<pcl/point_cloud.h>
视如敝屣#include<pcl/point_types.h>
读las⽂件
bool readLasFile(string filename){
//pcl点云
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
//打开las⽂件
std::ifstream ifs;
ifs.open(filename, std::ios::in | std::ios::binary);
if(!ifs.is_open())
return fal;
liblas::ReaderFactory f;
//使⽤ReaderFactory从stream中构造Reader⽽不是直接调⽤Reader构造函数,因为las可能是压缩的
liblas::Reader reader = f.CreateWithStream(ifs);
分外
liblas::Header const& header = reader.GetHeader();//读取⽂件头
int pointsNum = header.GetPointRecordsCount();//读取点数
//初始化cloud
cloud->width = pointsNum;
希望就在前方cloud->height =1;
cloud->resize(pointsNum);
//读取相关信息
vector<uint8_t>pclassification(pointsNum);//记录类别信息
vector<liblas::Color>pcolor(pointsNum);//记录颜⾊信息
北汉皇帝
vector<uint16_t>pintencity(pointsNum);//记录强度信息
for(int i =0; i < pointsNum; i++)//这⾥⽤for⽐wihle安全
{
reader.ReadNextPoint();
const liblas::Point& p = reader.GetPoint();
float px =(float)p.GetX();
float py =(float)p.GetY();
float pz =(float)p.GetZ();
(*cloud)[i].x = px;
(*cloud)[i].y = py;
(*cloud)[i].z = pz;
pclassification[i]= p.GetClassification().GetClass();
pcolor[i]= p.GetColor();
pintencity[i]= p.GetIntensity();
}
ifs.clo();//关闭⽂件
return true;
}
写las⽂件
bool writeLasFile(string filename, liblas::Header header, pcl::PointCloud<pcl::PointXYZ>::Ptr cloud){ //写⽂件头
苏轼和佛印的故事std::ofstream ofs(filename.c_str(), ios::out | ios::binary);
liblas::Writer writer(ofs, header);
writer.WriteHeader();
int pointsNum = cloud->size();//获取点数
//记录数据范围
float minx =99999999;
float miny =99999999;
float minz =99999999;
float maxx =-99999999;
float maxy =-99999999;
float maxz =-99999999;
//读取并写点
liblas::Point p(&header);
for(int i =0; i < pointsNum; i++){
float tx = cloud->at(i).x;
float ty = cloud->at(i).y;
float tz = cloud->at(i).z;
minx = minx > tx ? tx : minx;
办公文秘miny = miny > ty ? ty : miny;
minz = minz > tz ? tz : minz;
maxx = maxx < tx ? tx : maxx;
maxy = maxy < ty ? ty : maxy;
maxz = maxz < tz ? tz : maxz;
p.SetCoordinates(tx, ty, tz);
writer.WritePoint(p);
}
header.SetMax(maxx, maxy, maxz);//设置数据范围
header.SetMin(minx, miny, minz);
header.SetPointRecordsCount(pointsNum);//设置点数
//(若中间处理过程点数有变化的话,可以通过此⽅法进⾏修改)
//(若⽆变动,则可以在⼀开始就设置点数)
writer.SetHeader(header);//设置⽂件头
writer.WriteHeader();//重写⽂件头
ofs.clo();//关闭⽂件
return true;
和声大调降几级
}

本文发布于:2023-06-09 00:04:28,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/906682.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:点数   信息   记录   设置   读取   范围   数据   需要
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图