PCL基本操作

2021-10-02 05:36:26 字數 4252 閱讀 3865

程式執行時間計算:以秒輸出「程式段」的執行時間。

#include // 標頭檔案

// 程式段

pcl::console::tictoc time; time.tic();

+程式段 + cout<#include #include pcl::pointcloud::ptr cloudpointer(new pcl::pointcloud);

pcl::pointcloudcloud;

cloud = *cloudpointer;

cloudpointer = cloud.makeshared();

#include #include #include pcl::pointcloud::ptr cloud;

cloud = pcl::pointcloud::ptr (new pcl::pointcloud);

pcl::io::loadpcdfile("your_pcd_file.pcd", *cloud); //讀取點雲

pcl::pointxyz minpt, maxpt;

pcl::getminmax3d (*cloud, minpt, maxpt); //計算

#include #include #include #include // 新建點雲物件cloud用於存放原點雲

pcl::pointcloud::ptr cloud(new pcl::pointcloud);

// 開啟點雲 儲存在cloud中

pcl::io::loadpcdfile("your_pcd_file.pcd", *cloud);

// 新建物件用於存放拷貝點雲

pcl::pointcloud::ptr cloudout(new pcl::pointcloud)

// 索引值

std::vectorindexs = ;

// 執行計算

pcl::copypointcloud(*cloud, indexs, *cloudout);

#include #include #include #include pcl::pointcloud::ptr cloud(new pcl::pointcloud);

pcl::io::loadpcdfile("your_pcd_file.pcd", *cloud);

pcl::pointcloud::iterator index = cloud->begin();

//刪除第乙個

cloud->erase(index);

index = cloud->begin() + 5;

cloud->erase(cloud->begin());//刪除第5個

pcl::pointxyz point = ;

//在索引號為5的位置1上插入一點,原來的點後移一位

cloud->insert(cloud->begin() + 5, point);

cloud->push_back(point);//從點雲最後面插入一點

std::cout << cloud->points[5].x;//輸出1

如果刪除的點太多建議用上面的方法拷貝到新點雲,再賦值給原點雲,如果要新增很多點,建議先resize,然後用迴圈向點雲裡的新增。

#include #include #include #include #include pcl::pointcloud::ptr cloud (new pcl::pointcloud);

pcl::io::loadpcdfile("path/.pcd",*cloud);

//全域性變化

//構造變化矩陣

eigen::matrix4f transform_1 = eigen::matrix4f::identity();

float theta = m_pi/4; //旋轉的度數,這裡是45度

transform_1 (0,0) = cos (theta); //這裡是繞的z軸旋轉

transform_1 (0,1) = -sin(theta);

transform_1 (1,0) = sin (theta);

transform_1 (1,1) = cos (theta);

// transform_1 (0,2) = 0.3; //這樣會產生縮放效果

// transform_1 (1,2) = 0.6;

// transform_1 (2,2) = 1;

transform_1 (0,3) = 25; //這裡沿x軸平移

transform_1 (1,3) = 30;

transform_1 (2,3) = 380;

pcl::pointcloud::ptr transform_cloud1 (new pcl::pointcloud);

pcl::transformpointcloud(*cloud,*transform_cloud1,transform_1); //不言而喻

//區域性

//第乙個引數為輸入,第二個引數為輸入點雲中部分點集索引,第三個為儲存物件,第四個是變換矩陣。

pcl::transformpointcloud(*cloud,pcl::pointindices indices,*transform_cloud1,matrix);

pcl::pointcloud::ptr cloud (new pcl::pointcloud);

pcl::io::loadpcdfile("your pcd file.pcd",*cloud);

// 新建法線估計物件

pcl::normalestimationne;

// 輸入點雲

ne.setinputcloud(cloud);

// 新建查詢物件

pcl::search::kdtree::ptr tree (new pcl::search::kdtree());

// 設定查詢方法

ne.setsearchmethod(tree);

pcl::pointcloud::ptr cloud_normals(new pcl::pointcloud());

ne.setksearch(8);

ne.compute(*cloud_normals);

pcl::pointcloud::ptr cloud_with_nomal (new pcl::pointcloud);

pcl::concatenatefields(*cloud,*cloud_normals,*cloud_with_nomal);

pcl中的無效點是指:點的某一座標值為nan。

#include #include #include #include using namespace std;

typedef pcl::pointxyzrgba point;

typedef pcl::pointcloudcloudtype;

int main (int argc,char **ar**)

output->width = 1;

output->height = m;

cout<< "size is"kdtree.setinputcloud(cloud);

int k =2;

float everagedistance =0;

for (int i =0; i < cloud->size()/2;i++)

}

其思想就是:將原始資料插入到flann的kdtree中,尋找keypoints的最近鄰,如果距離等於0,則說明是同一點,提取索引即可。

eigen::vector4f centroid;  //質心

pcl::compute3dcentroid(*cloud_smoothed,centroid); //估計質心的座標

#include #include #include #include #include #include //loadpolygonfileobj所屬標頭檔案;

#include #include #include using namespace pcl;

int main(int argc,char **ar**)

以上**可以從.obj或.ply麵片格式轉化為點雲型別。

PCL點雲的基本讀取和顯示

廢話不多說,直接上 這是最基本的讀取與顯示,皆是利用pcl庫 include 標準輸入輸出流 include pcl的pcd格式檔案的輸入輸出標頭檔案 include pcl對各種格式的點的支援標頭檔案 include int main int argc,char argv std cout loa...

PCL學習筆記 基本用法2 基本資料結構

在pcl 1.x的版本中,基礎資料結構是pcl pointcloud。pointcloud是乙個c 類,其包括的資料如下所示 就是乙個int型別的資料 這個資料指定了點雲集在寬的方向上包含了多少個點。這個寬度有兩個意思 1.它指定了點雲中點的數量,如果是無組織點雲集的話 2.它指定了點雲中一行有多少...

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

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