PCL笔记二:PCD解析;PCD读取;PCD与XYZ转换;
生活随笔
收集整理的這篇文章主要介紹了
PCL笔记二:PCD解析;PCD读取;PCD与XYZ转换;
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
PCD文件解析
上一節(jié)中,我們獲取的PCD格式點云文件,內容如下:
# .PCD v0.7 - Point Cloud Data file format VERSION 0.7 FIELDS x y z SIZE 4 4 4 TYPE F F F COUNT 1 1 1 WIDTH 5 HEIGHT 1 VIEWPOINT 0 0 0 1 0 0 0 POINTS 5 DATA ascii 1.28125 577.09375 197.9375 828.125 599.03125 491.375 358.6875 917.4375 842.5625 764.5 178.28125 879.53125 727.53125 525.84375 311.28125PCD文由 “頭文件 + 點云數據” 構成,頭文件聲明了該點云數據集的基本特性。
第零行為注釋:標明文件類型。
第一行:VERSION
- 指定PCD文件的版本,由0.7可知該點云數據集是0.7版本的。
第二行:FIELDS
- 指定本點云數據集中任意一個點可以有的維度信息和其他附加信息。如:FIELDS x y z? 指每個點都有xyz三個維度信息,FIELDS x y z rgb 指每個點除了xyz維度信息外還有顏色信息等。
第三行:SIZE
- 儲存每個維度信息占用的字節(jié)數(byte)。1指用char型數據存儲維度信息,2指用short型數據存儲維度信息,4指用int或float型數據存儲維度信息,8指用double型數據存儲維度信息。
第四行:TYPE
- 用字符指定每一個維度的數據類型。
- I表示有符號類型:int8(char),int16(short),int32(int);
- U表示無符號類型:uint8(unsigned char),uint 16(unsigned short),uint32(unsigned int);
- F表示浮點型float和double。
第五行:COUNT
- 每個維度包含的元素個數。
第六行:WIDTH
- 點云數據集可分為有序數據集和無序數據集兩種。
- 有序數據集類似矩陣,有行列之分,無序數據集則無行列之分。
- 根據數據集是否有序,WIDTH由不同的含義。
- 對有序數據集而言:表示數據集的寬度(每行點的數目);
- 對于無序數據集而言:表示數據集中點的總數(和下面的POINTS一樣)。
第七行:HEIGHT
- 對有序數據集而言:表示數據集的高度(行數);
- 對于無序數據集而言:被設置為1,用于聲明一個數據集是否有序。
第八行:VIEWPOINTS
-
數據集中點云的獲取視點。視點信息被指定為“平移(txtytz) + 四元數(qwqxqyqz)”,默認值是:VIEWPOINT 0 0 0 1 0 0 0
第九行:POINTS
- 點云中點的總數,從0.7版本就開始顯得有點多余,可能會在后續(xù)版本中舍去這個參數。
第十行:DATA
- 指定存儲點云數據的數據存儲格式:ASCLL碼或二進制數據。
后續(xù)是數據部分:
- 以ASCLL碼存儲的點云數據,每一個點占據一行,“nan”表示不存在或非法的數據。
PCD文件讀取
#include<iostream> #include<pcl/io/pcd_io.h> #include<pcl/point_types.h> using namespace std;int main() {pcl::PointCloud < pcl::PointXYZ >::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);// 創(chuàng)建點云指針。// 讀入PCD格式文件,如果文件不存在,返回-1if (pcl::io::loadPCDFile<pcl::PointXYZ>("test_pcd_file.pcd", *cloud) == -1) {PCL_ERROR("Couldn't read file test_pcd_file.pcd\n");return -1;}cout << "Loaded "<< cloud->points.size()<< " data points from test_pcd_file.pcd with the following fields:"<< endl;// 顯示前5個點:for (size_t i = 0; i < 5; i++){cout << cloud->points[i].x << "\t" << cloud->points[i].y << "\t" << cloud->points[i].z << endl;}system("pause");return 0; }xyz文件轉pcd文件
- xyz格式數據一般每行有6列數據,前3列分別為點的 x,y,z坐標,后3列為點的法向量,一般以空格分隔;
總結
以上是生活随笔為你收集整理的PCL笔记二:PCD解析;PCD读取;PCD与XYZ转换;的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Reflex WMS入门系列二十四:拆托
- 下一篇: 学生信息管理系统报告