PCL點雲索引

2021-08-29 04:39:28 字數 1636 閱讀 7419

點雲索引其實就是將點雲中不同點加上標籤,方便後面的分類提取。有了點雲的索引值可以方便的對點雲進行不同操作:

以下舉例說明:

1. 儲存一點雲中某些特定的點

pcl::pointcloudcloud(new pcl::pointcloud);//輸入點雲

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

pcl::pointcloud::ptr cloudout(new pcl::pointcloud);//輸出點雲

std::vectorindexs = ;//宣告索引值

pcl::copypointcloud(*cloud, indexs, *cloudout);//將對應索引的點儲存

如indexs代表點雲中某些特定的點,如排序為第1,2,5三個點,這些順序通常是有kdtree得到的。

如果沒有這個引數,就是將cloud中所有的點全部填入到cloudout。

2. 通過索引迭代輸出每個聚類對應的點雲

pcl::euclideanclusterextractionec;

ec.extract (cluster_indices);

std::cerr << cluster_indices.size() << std::endl; //輸出聚類的數目

int j = 0;//通過兩次迭代,總共產生j個聚類

for (std::vector::const_iterator it = cluster_indices.begin (); it != cluster_indices.end (); ++it)//迭代j次將j個聚類中對應索引的點存到j個pcd中

return (0);

3. 儲存模型(平面,圓柱等等)分割中的內點

pcl::pointindices::ptr inliers_plane (new pcl::pointindices);//宣告指向pointindices的共享指標

pcl::modelcoefficients::ptr coefficients_plane;

pcl::sacsegmentationfromnormalsseg;

seg.setinputcloud (cloud_filtered);//輸入點雲

seg.setinputnormals (cloud_normals);//輸入法線

seg.segment (*inliers_plane, *coefficients_plane);//計算模型內點索引

extract.setinputcloud (cloud_filtered);//輸入點雲

extract.setindices (inliers_plane);//輸入模型內點索引

//分割模型內點存到檔案   

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

extract.filter (*cloud_plane);//根據輸入點雲和模型內點索引分割出內點對應點雲

writer.write ("table_scene_mug_stereo_textured_plane.pcd", *cloud_plane, false);//儲存模型內點對應點雲

pcl點雲處理

一 如何實現類似pcl pointcloud ptr和pcl pointcloud的兩個類相互轉換?include include include pcl pointcloud ptr cloudpointer new pcl pointcloud pcl pointcloudcloud cloud...

點雲 PCL學習

忘記了 vscode編譯c cmake教程 cmake入門之建立乙個基於pcl的最小工程 pcl cropbox 過濾掉使用者給定立方體內的點雲資料 pcl 視覺化 pcd檔案 安裝pcl sudo add apt repository ppa v launchpad jochen spricker...

點雲 PCL點雲濾波與實現

目錄 直通濾波器 passthrough 條件濾波 conditional removal 球半徑濾波器 radiusoutlinerremoval 4 統計濾波器 statisticaloutlierremoval 5 體素降取樣 voxelgrid 均勻取樣 uniform sampling i...