linux怎么查看.pcd文件,PCD文件格式详解及在PCL下读取PCD文件
一、PCD簡(jiǎn)介
1.1 PCD版本
在點(diǎn)云庫(kù)PCL 1.0發(fā)布之前,PCD文件格式就已經(jīng)發(fā)展更新了許多版本。這些新舊不同的版本用PCD_Vx來(lái)編號(hào)(例如PCD_V5、PCD_V6和PCD_V7等),分別代表PCD文件的0.5版、0.6版和0.7版。在PCL中,用到的PCD文件格式的正式發(fā)布是0.7版,即PCD_V7。
1.2 頭文件格式
PCD文由?“頭文件 + 點(diǎn)云數(shù)據(jù)”構(gòu)成,頭文件聲明了該點(diǎn)云數(shù)據(jù)集的基本特性。下面以PCD_V7版本的PCD文件為例,對(duì)頭文件進(jìn)行介紹。打開(kāi)經(jīng)典的兔子模型(用記事本就能打開(kāi)),頭文件及部分點(diǎn)云數(shù)據(jù)如下所示:
# .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 35947
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 35947
DATA ascii
-1.10698 3.272394 -0.447241
-1.80195 3.367094 -0.704211
-4.12496 5.602794 2.824819
1.2.1 VERSION
指定PCD文件的版本,由0.7可知該點(diǎn)云數(shù)據(jù)集是0.7版本的。
VERSION 0.7 //PCD版本號(hào)為0.7版
1.2.2 FIELDS
指定本點(diǎn)云數(shù)據(jù)集中任意一個(gè)點(diǎn)可以有的維度信息和其他附加信息。如:FIELDS x y z? 指每個(gè)點(diǎn)都有xyz三個(gè)維度信息,FIELDS x y z rgb 指每個(gè)點(diǎn)除了xyz維度信息外還有顏色信息等。
FIELDS x y z //該數(shù)據(jù)集中包含每一個(gè)點(diǎn)的xyz緯度信息
1.2.3 SIZE
儲(chǔ)存每個(gè)維度信息占用的字節(jié)數(shù)(byte)。1指用char型數(shù)據(jù)存儲(chǔ)維度信息,2指用short型數(shù)據(jù)存儲(chǔ)維度信息,4指用int或float型數(shù)據(jù)存儲(chǔ)維度信息,8指用double型數(shù)據(jù)存儲(chǔ)維度信息。
SIZE 4 4 4 //x y z每個(gè)維度均占用4個(gè)字節(jié)
1.2.4 TYPE
用字符指定每一個(gè)維度的數(shù)據(jù)類(lèi)型。I表示有符號(hào)類(lèi)型:int8(char),int16(short),int32(int);U表示無(wú)符號(hào)類(lèi)型:uint8(unsigned char),uint 16(unsigned short),uint32(unsigned int);F表示浮點(diǎn)型float和double。
TYPE F F F //x y z每個(gè)維度的均為4字節(jié)的浮點(diǎn)型,即為float
1.2.5 COUNT
每個(gè)維度包含的元素個(gè)數(shù)。
COUNT 1 1 1 //x y z每個(gè)維度均包含1個(gè)元素
1.2.6 WIDTH
點(diǎn)云數(shù)據(jù)集可分為有序數(shù)據(jù)集和無(wú)序數(shù)據(jù)集兩種。有序數(shù)據(jù)集類(lèi)似矩陣,有行列之分,無(wú)序數(shù)據(jù)集則無(wú)行列之分。根據(jù)數(shù)據(jù)集是否有序,WIDTH由不同的含義。
對(duì)有序數(shù)據(jù)集而言:表示數(shù)據(jù)集的寬度(每行點(diǎn)的數(shù)目);
對(duì)于無(wú)序數(shù)據(jù)集而言:表示數(shù)據(jù)集中點(diǎn)的總數(shù)(和下面的POINTS一樣)。
1.2.7 HEIGHT
對(duì)有序數(shù)據(jù)集而言:表示數(shù)據(jù)集的高度(行數(shù));
對(duì)于無(wú)序數(shù)據(jù)集而言:被設(shè)置為1,用于聲明一個(gè)數(shù)據(jù)集是否有序。
//該數(shù)據(jù)集為無(wú)序數(shù)據(jù)集,共有35947個(gè)點(diǎn)
WIDTH 35947
HEIGHT 1
1.2.8 VIEWPOINTS
數(shù)據(jù)集中點(diǎn)云的獲取視點(diǎn)。視點(diǎn)信息被指定為“平移(txtytz) + 四元數(shù)(qwqxqyqz)”,默認(rèn)值是:VIEWPOINT 0 0 0 1 0 0 0
VIEWPOINT 0 0 0 1 0 0 0 //數(shù)據(jù)集的獲取視點(diǎn)
1.2.9 POINTS
點(diǎn)云中點(diǎn)的總數(shù),從0.7版本就開(kāi)始顯得有點(diǎn)多余,可能會(huì)在后續(xù)版本中舍去這個(gè)參數(shù)。
POINTS 35947 //該數(shù)據(jù)集中共有35947個(gè)點(diǎn)
1.2.10 DATA
指定存儲(chǔ)點(diǎn)云數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)格式:ASCLL碼或二進(jìn)制數(shù)據(jù)。
DATA ascii //該數(shù)據(jù)集用ASCLL碼存儲(chǔ)數(shù)據(jù)
1.3 點(diǎn)云數(shù)據(jù)
以ASCLL碼存儲(chǔ)的點(diǎn)云數(shù)據(jù),每一個(gè)點(diǎn)占據(jù)一行,“nan”表示不存在或非法的數(shù)據(jù)。
-1.10698 3.272394 -0.447241
-1.80195 3.367094 -0.704211
-4.12496 5.602794 2.824819
......
二、PCD文件在PCL下的讀取
#include
#include
#include
int main()
{
pcl::PointCloud<:pointxyz>::Ptr cloud(new pcl::PointCloud<:pointxyz>);//創(chuàng)建點(diǎn)云指針
if(pcl::io::loadPCDFile<:pointxyz>("rabbit.pcd", *cloud )== -1)//讀入PCD格式文件,如果文件不存在,返回-1
{
PCL_ERROR("Couldn't read file rabbit.pcd\n");
return -1;
}
std::cout << "Loaded"
<< cloud->points.size()
<< "data points from rabbit.pcd with the following fields: "
<< std::endl;
//for (size_t i = 0; i < cloud->points.size(); i++) 顯示所有的點(diǎn)
//顯示前5個(gè)點(diǎn)
for (size_t i = 0; i < 5; i++)
{
std::cout << " " << cloud->points[i].x << " " << cloud->points[i].y << " " << cloud->points[i].z << std::endl;
}
system("pause");
return 0;
}
總結(jié)
以上是生活随笔為你收集整理的linux怎么查看.pcd文件,PCD文件格式详解及在PCL下读取PCD文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何使用Epicor Functions
- 下一篇: 《远见》的读后感作文1000字范文