pcl常用小知識和幾何計算

2021-08-29 08:04:45 字數 3997 閱讀 7196

pcl中計算程式執行時間有很多函式,其中利用控制台的時間計算是:

首先必須包含標頭檔案#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 pcl::pointcloud::ptr cloud(new pcl::pointcloud);

pcl::io::loadpcdfile("c:\office3-after21111.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("c:\office3-after21111.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("/home/yxg/pcl/pcd/mid.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 **argv)

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 **argv)

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

參考:

pcl常用小知識

pcl中計算程式執行時間有很多函式,其中利用控制台的時間計算是 首先必須包含標頭檔案 include,其次,pcl console tictoc time time.tic 程式段 cout include include pcl pointcloud ptr cloudpointer new pc...

計算幾何小知識整理

vec x1,y1 vec y1,y2 vec 與 vec 的夾角為 theta cos theta x1 cdot x2 y1 cdot y2 sqrt cdot sqrt theta acos x1 cdot x2 y1 cdot y2 sqrt cdot sqrt vec x1,y1 vec ...

計算幾何知識歸納

目錄 線段及直線的基本運算 1.點與線段的關係 2.求點到線段所在直線垂線的垂足 3.點到線段的最近點 4.點到線段所在直線的距離 5.點到折線集的最近距離 6.判斷圓是否在多邊形內 7.求向量夾角余弦 8.求線段之間的夾角 9.判斷線段是否相交 10.判斷線段是否相交但不交在端點處 11.求線段所...