• pcd和ply方式存储点云简单介绍,以及ply格式转换为pcd格式点云方法


    一、pcd格式

    一个pcd文件中通常由两部分组成:文件说明和点云数据

    1.文件说明

    由11行组成

    # .PCD v0.7 - Point Cloud Data file format
    VERSION 0.7  #版本说明

    FIELDS x y z #每个数据组成
    SIZE 4 4 4  #每个数据占用的字节数
    TYPE F F F   #每个数据对应的类型,F表示浮点类型,U表示无符号整型,I表示整型
    COUNT 1 1 1  #每个数据对应的维度
    WIDTH 35947  #对于无序点云为点的数量,对于有序点云为一圈点的数量。
    HEIGHT 1   #对于无序点云取值默认为1,对于有序点云为垂直方向上的点数,比如多少线雷达
    VIEWPOINT 0 0 0 1 0 0 0  #点云获取的视点,用于坐标变换
    POINTS 35947  #点的数量
    DATA ascii  #点云数据的存储类型,0.7版本支持两种存储方式:ascii和binary。

    其中数据组成FIELDS还可以有下面多种组成

    FIELDS x y z        // xyz
    FIELDS x y z rgb     //xyz + colors
    FIELDS x y z normal_x normal_y normal_z   // xyz + surface normals

    rgb的数据格式在pcl-1.9以后为uint,之前为float。所以在pcl-1.9之后TYPE类型为TYPE F F F U,之前为TYPE F F F F。

    2.点云数据

    例子:

    -0.037829701 0.12794 0.0044746702
    -0.044779401 0.128887 0.00190497
    -0.068009503 0.151244 0.037195299
    -0.00228741 0.13015001 0.0232201
    -0.022605401 0.12667499 0.0071558701
    -0.025107799 0.125921 0.0062422599
    -0.037120901 0.12744901 0.0017956001
    0.033213001 0.112692 0.0276861
    0.038042501 0.109755 0.0161689

    3.报错

    读取pcd文件中的rgb信息时,报错

    Failed to find match for field 'rgb'

     原因有两个:

    一是读取的pcd文件中没有rgb数据。

    二是pcl的版本与文件中存储的rgb数据格式不一致。

    二 、ply格式

     通常由两部分组成:分别是文件说明和点云数据

    1.文件说明

    ply  #声明是ply文件
    format ascii 1.0  #存储方式
    comment zipper output  #备注说明,解释性描述
    element vertex 35947 #表示第一种元素构成是顶点,共35947个,下面的property对应点的组成。
    property float x  #点的第一个元素,x,浮点型
    property float y  #点的第二个元素,y,浮点型
    property float z  #点的第三个元素,z,浮点型
    property float confidence #点的第四个元素,置信度,浮点型
    property float intensity  #点的第五个元素,强度,浮点型
    element face 69451 #表示第二种元素构成是面,共69451个,下面的property对应面的组成
    property list uchar int vertex_indices  #list uchar 表示面类型,int vertex_indices面中对应上述点的索引
    end_header   #描述结束,下面开始逐一按行列举上述两种元素,第一种元素是35947个点,每行有5个属性,共35947行。同样地,然后开始按行列举上述第二种元素。

    一般元素以下面的格式描述:

            element   <元素名>   <在文件中的个数> 
            property   <数据类型>   <属性名-1> 
            property   <数据类型>   <属性名-2> 
            property   <数据类型>   <属性名-3>

    2.点云数据

    例子:

    -0.0378297 0.12794 0.00447467 0.850855 0.5
    -0.0447794 0.128887 0.00190497 0.900159 0.5
    -0.0680095 0.151244 0.0371953 0.398443 0.5
    -0.00228741 0.13015 0.0232201 0.85268 0.5
    -0.0226054 0.126675 0.00715587 0.675938 0.5
    -0.0251078 0.125921 0.00624226 0.711533 0.5
    -0.0371209 0.127449 0.0017956 0.888639 0.5
    0.033213 0.112692 0.0276861 0.652757 0.5
    0.0380425 0.109755 0.0161689 0.708171 0.5

     三 、ply转为pcd文件

    1. #include <pcl/io/ply_io.h>
    2. #include <pcl/io/pcd_io.h>
    3. #include <QFileDialog>
    1. pcl::PCLPointCloud2 cloud;
    2. //加载ply文件
    3. pcl::PLYReader reader;
    4. QString fileName = QFileDialog::getOpenFileName(this, "Open PointCloud", ".", "Open PCD files(*.ply)");
    5. if(fileName == "") return;
    6. reader.read(fileName.toStdString(), cloud);
    7. //将ply文件保存为pcd文件
    8. pcl::PCDWriter writer;
    9. writer.write(QString("/home/li/pcd/"+fileName.section('/',-1,-1).section('.',0,0)+".pcd").toStdString(), cloud);

     四 、pcd转为ply文件

    1. pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    2. QString fileName = QFileDialog::getOpenFileName(this, "Open PointCloud", ".", "Open PCD files(*.pcd)");
    3. if(fileName == "") return;
    4. pcl::io::loadPCDFile<pcl::PointXYZ>(fileName.toStdString(), *cloud);
    5. pcl::PLYWriter writer;
    6. writer.write(QString("/home/li/pcd/"+fileName.section('/',-1,-1).section('.',0,0)+".ply").toStdString(), *cloud);
    7. //pcl::io::savePLYFile("test.ply", *cloud);
  • 相关阅读:
    家政服务管理系统,家政服务系统平台,家政服务网站毕设作品
    使用DMFLDR工具将Excel数据导入到达梦数据库
    编程参考 - 编程中给变量起名时如何选择前缀,以及匈牙利命名法等
    【紫光同创国产FPGA教程】——【PGL22G第八章】HDMI输出彩条实验例程
    MySQL搭建主从复制流程及相关问题
    19、Python单元测试基础:unittest模块的基本使用
    c++之泛型算法
    ReactHub:我用 ChatGPT 搞了一个 React 的资源导航网站,谁有我用心啊!
    Java SqlSessionFactoryBean.setMapperLocations方法代码示例
    由于找不到emp.dll无法继续执行此代码问题的五个解决方法
  • 原文地址:https://blog.csdn.net/m0_67254672/article/details/133884123