目录
一、基础知识
(1)什么是点云
点云数据(point cloud data)是指在一个三维坐标系统中的一组向量的集合。
扫描资料以点的形式记录,每一个点包含有三维坐标,有些可能含有颜色信息(RGB)或反射强度信息(Intensity)。
点云数据除了具有几何位置以外,有的还有颜色信息。颜色信息通常是通过相机获取彩色影像,然后将对应位置的像素的颜色信息(RGB)赋予点云中对应的点。强度信息的获取是激光扫描仪接收装置采集到的回波强度,此强度信息与目标的表面材质、粗糙度、入射角方向,以及仪器的发射能量,激光波长有关。
(2).ply格式点云文件简介
ply文件是由文件头和数据区两部分组成,文件头记录的是点云文件中的注释、元素类别和属性,以ply开头,以end header结尾。
format之后,是文件的编码方式和版本,编码方式有ascii、binary_little_endian 、binary_big_endian。
comment之后,制作者可以添加一些作者信息,点云基本信息。
element之后,element元素信息包括种类、个数,ply文件中的元素一般包括顶点(vertex)、面(face)、边(edge)等。
property之后,property属性信息包括属性字段的存储类型和属性名。
(2).pcd格式点云文件简介
VERSION 0.7,指定pcd文件的版本。
FIELDS,指定每个点可以具有的维度,以及每个维度所代表的含义。 例如:FIELDS x y z r g b表示该点的位置信息(x,y,z),颜色信息(r,g,b)。
SIZE,以字节为单位指定每个数据所占用的内存。
TYPE, 指定每个数据的数据类型,I:可表示int8,int16,int32,U:可表示uint8,unit16,uint32,F:表示float
COUNT, 指定每个维度有多少元素,例如xyz数据通常只有一个元素。
指定每个维度有多少元素,例如xyz数据通常只有一个元素。
WIDTH,指定数据点的宽度,它包含两个含义: 1.可指定点云总个数(与POINTS相同),用于无组织的数据, 2.可指定有组织点云数据的宽度(连续点的总数)。
HEIGTH,指定数据点的高度,它包含两个含义:1.可指定有组织的点云数据的高度(总行数), 2.对未组织的数据,它被设置为1。
POINTS,指定点云总个数。
VIEWPOINT,采集数据时的视点(由平移tx,ty,tz和四元数qw,qx,qy,qz组成)。
DATA,点云数据存储的数据类型(支持ascii和binary)。
二、代码
#include <pcl/io/ply_io.h>
#include <pcl/io/pcd_io.h>
int main(int argc, char** argv)
{
pcl::PCLPointCloud2 cloud;
//加载ply文件
pcl::PLYReader reader;
reader.read("D://codes//PCL//PCL//point_data//pointcloud_1.ply", cloud);
//将ply文件保存为pcd文件
pcl::PCDWriter writer;
writer.write("D://codes//PCL//PCL//point_data//person_middle_a.pcd", cloud);
return 0;
}
三、参考链接
(1)点云数据pcd文件简介_靠谱成年人的博客-CSDN博客_点云pcd 是什么坐标系
(2)ply las pcd等一些常见的基本点云文件格式的读写方法_zmsdbl的博客-CSDN博客_pcd文件读取及查看