zoukankan      html  css  js  c++  java
  • PCL中IO模块和类的介绍

    I/O模块中共有21个类

    (1)class pcl::FIleReader:定义了PCD文件的读取接口,主要用作其他读取类的父类   pcl::FileReader有pcl::PCDReader和pcl::PLYReader子类

     (2)class pcl::FIleWrite : 与class pcl::FIleReader对应,是写入PCD文件类的接口定义,作为其他写入类的父类,pcl::Filewriter有pcl::PCDwriter和pcl::PLYWriter子类

    (3) class pcl::Grabber:类Grabber为PCL1.X对应的设备驱动接口的基类定义

         父类                    子类

                              pcl::ONIGrabber

    pcl::Grabber      pcl::OpenNIGrabber

                              pcl::PCDGrabberBase     ----------pcl::PCDGrabber<  PointT  >

    (4)classopenni_wrapper::OpenNIDevice:定义OpenNI设备的基类,用于获取包括红外数据,RGB数据,深度图像数据

                          父类                                                                 子类

                                                                      openni_wrapper::DeviceONI

    openni_wrapper::OpenNIDevice               openni_wrapper::DeviceKinect

                                                                     openni_wrapper::DevicePrimesense

                                                                    openni_wrapper::DeviceXtionPro

    PCD(点云数据)文件格式,以下几种格式

    (1)PLY是一种多边形文件格式,

    (2)STL是3D System公司创建的模型文件格式,主要应用于CAD,CAM领域

    (3)OBJ是从几何学上定义的文件格式,

    (4)X3D是符合ISO标准的基于XML的文件格式,表示3D计算机图形数据

    PCD文件头格式

    每个PCD文件包含一个文件头,确定和声明文件中存储这点云的数据的某种特性,PCD文件必须用ASCII码来编码,

       (1)VERSION---------指定PCD文件版本

       (2) FIELSS------------指定一个点恶意有的每一个维度和字段的名字例如

                                             FILEDS  x y z                                                  #XYZ data

                                            FILEDS x y z rgb                                              #XYZ + color

                                FILEDS x y z normal_x normal_y normal_z                  #XYZ +surface normal

                                    FILEDS j1 j2 j3                                                         #moment invariants

                                       .....

         (3) SIZE-----------用字节数指定每一个维度的大小        例如

                       unsigned  char/char?      has  1 byte

                       unsigned  short/short?       has  2 byte

                         double         ?has  8 byte

           (4) TYPE------------用一个字符指定每一个维度的类型  被接受类型有

                  I----------------表示有符号类型   int8(char)           int16 (short)     int32(int)

                 U----------------表示无符号类型   ------------------

                 F----------------表示浮点类型

            (5)COUNT----------指定每一维度包含的元数目(默认情况下,没有设置 的话,所有维度的数目被设置为1)

    (6)WIDTH------用点的数量表示点云数据集的宽度,根据有序点云还是无序点云,WIDTH有两层解释:

                                                     1,它能确定无序数据集的点云中点的个数,

                                                     2,它能确定有序点云数据集的宽度

    注意有序点云数据集,意味着点云是类似与图像的结构,数据分为行和列,这种点云的实例包括立体摄像机和时间飞行摄像机生成的数据,有序数据集的优势在于,预先了解相邻点(和像素点类似)的关系,邻域操作更加高效,这样就加速了计算并降低了PCL中某些算法的成本。例如:WIDTH   640    #每行有640个点

    (7)HEIGHT---------------用点的数目表示点云数据集的高度。类似于WIDTH也有两层解释,

    有序点云的例子:WIDTH    640            #像图像一样的有序结构,有640行480列,

                                HEIGHT   480            #这样该数据集中共有640*480=307200个人点

    无序点云例子:

                                WIDTH  307200

                                HEIGHT    1              #有307200个点的有序点云数据集

      (8)VIEWPOINT--------------------指定数据集中点云的获取视角。VIEWPOINT有可能在不同坐标系之间转换的时候应用,在辅助获取其他特征时,也比较有用,  例如曲面发现,在判断方向一致性时,需要知道视点的方位

               视点信息被指为平移(tx ty tz) +四元数(qw qx qy qz)

    (9 ) POINTS----------------指定点云中点的总数

    (10) DATA---------------指定存储点云数据的数据结构,有两种形式:ASCII和二进制

    (注意PCD文件的文件头部分必须是以上部分顺序的精确的指定)

    4  数据存储类型:

                  (1)如果易ASCII形式,每一点占据一个新行,

                    (2)如果以二进制的形式,这里数据是数组向量的PCL

    例子   PCD 文件的一个片段

    #。PCD  v.7  --Point Cloud Data file format
    VERSION .7
    FIELDS x y z rgb
    SIZE 4 4 4 4 
    TYPE F FFF
    COUNT 1 1 1 1
    WIDTH 213
    HEIGHT 1
    VIEWPOINT 0 0 0  1  0 0 0 
    POINTS 213
    DATA ascii
    0.93773    0.33763 0 4.218e+06
    0.90805   0.35641  0 4.2108e+06  

    微信公众号号可扫描二维码一起共同学习交流

    未完待续**************************

  • 相关阅读:
    ActiveX控件的注册和反注册
    谷歌浏览器调用activex控件方法
    VC 中的ATL ActiveX 和 MFC ActiveX 有什么区别
    DirectX介绍(转)
    最简单的基于FFMPEG的图像编码器(YUV编码为JPEG)(转)
    统计Visual Studio项目的代码行数
    【Sqlite3】sqlite_sequence表(转)
    linuxunix系统下的字符操作
    tif
    字符串截取
  • 原文地址:https://www.cnblogs.com/li-yao7758258/p/6434702.html
Copyright © 2011-2022 走看看