PCL學習筆記

2021-10-03 09:51:00 字數 3240 閱讀 1682

1.通過讀取pcd檔案生成點雲

std::vector<

int>pcdfile_indices=pcl::console::

parse_file_extension_argument

(argc,ar**,

"pcd");

//在輸入引數中找到含有pcd的檔案

std::string filename

(ar**[pcdfile_indices[0]

]);//讀取檔名

pcl::io::

loadpcdfile

(filename,

*cloud)

;//讀取點雲資訊,此函式有返回值,可以用來判斷是否讀取成功

2.直接構建點雲

pcl::pointxyzrgb point;

point.x =

0.5* cosf (pcl::

deg2rad

(angle));

point.y = sinf (pcl::

deg2rad

(angle));

point.z = z;

uint32_t rgb =

(static_cast

<

uint32_t

>

(r)<<16|

static_cast

<

uint32_t

>

(g)<<8|

static_cast

<

uint32_t

>

(b))

; point.rgb =

*reinterpret_cast

<

float

*>

(&rgb)

;//reinterpret_cast用作處理無關型別的轉換,新舊值擁有相同的bite數

point_cloud_ptr-

>points.push_back (point)

;

# 點雲繪製 ## 1.cloudviewer ```cpp pcl::visualization::cloudviewer viewer("test"); viewer.showcloud(*cloud); ``` ## 2.pclvisualizer

//   //顯示點雲資訊

// pcl::visualization::pclvisualizer::ptr viewer (new pcl::visualization::pclvisualizer("3d viewer"));

// viewer->setbackgroundcolor(0,0,0);

// viewer->addpointcloud(cloud,"cloud");

// viewer->setpointcloudrenderingproperties(pcl::visualization::pcl_visualizer_point_size,1,"cloud");

// viewer->addpointcloud(cloud1,"cloud1");

// viewer->setpointcloudrenderingproperties(pcl::visualization::pcl_visualizer_point_size,1,"cloud1");

//

// viewer->initcameraparameters();

顏色繪製也可以採用如下方式

pcl::visualization::pointcloudcolorhandlerrgbfield

rgb(cloud)

; viewer-

>addpointcloud

(cloud, rgb,

"sample cloud"

);

1. passthrough 直通濾波

官方教程:filtering a pointcloud using a passthrough filter

class pcl::passthrough< pointt >

class pcl::passthrough< pcl::pclpointcloud2 >

pcl::passthrough pass;

// 建立直通濾波器物件

pass.setinputcloud (cloud)

;// 輸入點雲

pass.setfilterfieldname (

"z")

;// 設定過濾字段

pass.setfilterlimits (

0.0,

1.0)

;// 設定範圍

(true); // 設定字段範圍內的是保留(false)還是過濾掉(true)

pass.filter (

*cloud_filtered)

;// 執行濾波,並儲存結果

pcl::voxelgrid voxel;

// 輸入點雲

voxel.setinputcloud (cloud)

;// 設定體素大小

voxel.setleafsize (

0.01f

,0.01f

,0.01f);

// 輸出點雲

voxel.filter (

*cloud_filtered)

;// 通過向量設定體素柵格 leaf_size

關鍵成員函式:

void setleafsize (

const eigen::vector4f &leaf_size)

// 通過 lx, ly, lz 分別設定體素柵格在 xyz 3個方向上的尺寸

void setleafsize (

float lx,

float ly,

float lz)

// 設定是否對全部字段進行下取樣

// 若需要在全部字段(包括顏色、強度等)下取樣則設定引數 downsample 為 true

// 僅對 xyz 欄位下取樣則設定為 false

void setdownsamplealldata (

bool downsample)

1.資料格式不同

2.用在的場合不同

PCL學習筆記(二) PCL編碼風格

一 pcl命名規範 1 檔案命名 所有的檔名單詞之間應該用下劃線隔開 2 目錄命名 所有的目錄及其子目錄命名時,如果有多個單詞組成。其之間用下劃線隔開。3.include語句 當檔案在同一目錄下時include指示語句用雙引號,在其他情況下則用尖括號。include include include ...

PCL學習筆記(1)

第三章 pcl基礎 3.1.1 pcl推薦命名規範 類名和其他自定義型別應該是camelcased 駝峰命名 命名規範,即連寫單詞組成命名,每個單詞首字母大寫 迭代子變數應反映出它們的迭代物件常量名字應該大寫類成員變數命名單詞之間用下劃線隔開並以下劃線結尾 3.3.2 pointt型別 struct...

pcl學習筆記(一)

pcl的視覺化 一 pcl中visualization模組及類介紹 pcl中pcl visualization庫提供了視覺化相關的資料結構和元件,其主要是為了視覺化其他模組的演算法處理後的結果,可直觀的反饋給使用者。class pcl visualization pclvisualizer 類pcl...