栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

输入输出IO(2)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

输入输出IO(2)

点云文件格式--PCD文件说明

VERSION . 7  # PCD文件版本为0.7
FIELDS x y z rgb  # 每个点具有的属性 x坐标 y坐标 z坐标 颜色
SIZE 4 4 4 4  # 每个属性字段对应的大小-字节数
TYPE F F F F  # 每个属性字段对应的格式-F-FLOAT浮点数
COUNT 1 1 1 1  # 每个属性字段包含的元素个数
WIDTH 213
HEIGHT 1  # 无序点云的高度设置为1,有序则按照行列即可
VIEWPOINT 0 0 0 1 0 0 0  # 点云的获取视点,平移量+四元数
POINTS 213  # 点云数量,即宽*高
DATA ascii  # 数据文件类型,ascii和二进制
0.8741 0.5214 0.2365 4.2153e+06  # 具体点描述
0.8741 0.5214 0.2365 4.2153e+06
0.8741 0.5214 0.2365 4.2153e+06
0.8741 0.5214 0.2365 4.2153e+06
0.8741 0.5214 0.2365 4.2153e+06
……

PCD点云文件读取的头文件及关键语句:

//头文件部分
#include 
#include 
#include 

//新建一个点云指针并实例化
pcl::PointCloud::Ptr cloud(new pcl::PointCloud);

//打开并读取PCD文件
if(pcl::io::loadPCDFile("***.pcd",*cloud) == -1)
{
    PCL_ERROR("Couldn't read file ***.pcd n");
    return(-1);
}

PCD点云文件写入的头文件及关键语句:

//头文件
#include 
#include 
#include 

//创建点云
pcl::PointCloud cloud;
cloud.width = 3;
cloud.height = 1;
cloud.is_dense = false;
cloud.points.resize(cloud.width * cloud.height);
for(size_t i = 0; i < cloud.points.size(); i++)
{
    cloud.points[i].x = 1.0202;
    cloud.points[i].y = 2.0202;
    cloud.points[i].z = 3.0202;
}

//写入点云
pcl::io::savePCDFileASCIi("***.pcd",cloud);

连接点云的关键语句:

//简单合并两个点云
pcl::PointCloud cloud_1;
pcl::PointCloud cloud_2;
pcl::PointCloud cloud_1_2;
cloud_1_2 = cloud_1 + cloud_2;

//合并一个点云的不同属性文件
pcl::PointCloud cloud_xyz;
pcl::PointCloud cloud_n;
pcl::PointCloud cloud_xyz_n;
pcl::concatenateFields(cloud_xyz,cloud_n,cloud_xyz_n);

点云数据格式转换:LAS--PCD,主要依赖LibLAS

//头文件
#include 
#include 
#include 
#include 
#include 
#include 

//打开LAS文件
std::ifstream ifs("***.las",std::ios::in | std::ios::binary);

//读取LAS文件
liblas::ReaderFactory f;
liblas::Reader reader = f.CreateWithStream(ifs);

//获取LAS文件点数
int las_pts = reader.GetHeader().GetPointRecordsCount();

//逐点读取LAS文件并存入cloud
while(reader.ReadNextPoint())
{
    //读取xyz
    cloud.points[i].x = (reader.GetPoint().GetX());
    cloud.points[i].y = (reader.GetPoint().GetY());
    cloud.points[i].z = (reader.GetPoint().GetZ());

    //读取rgb
    r = (reader.GetPoint().GetColor().GetRed());
    g = (reader.GetPoint().GetColor().GetGreen());
    b = (reader.GetPoint().GetColor().GetBlue());
    r_n = ceil(((float)r / 65536) * (float)256);
    g_n = ceil(((float)g / 65536) * (float)256);
    b_n = ceil(((float)b / 65536) * (float)256);
    rgb = ((int)r_n) << 16 | ((int)g_n) << 8 | ((int)b_n);
    cloud.points[i].rgb = *reinterpret_cast(&rgb);
    i++;
}

PLY文件读取的关键语句:

//读取PLY文件
pcl::PLYReader reader;
if (reader.read(filename,cloud) < 0)
    return(false);

//写入PLY文件
pcl::PLYWriter writer;
writer.write("***.ply",cloud);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/588471.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号