使用PCL從CAD模型中提取不同視角下的點雲

2021-10-06 07:37:58 字數 1559 閱讀 1258

經過不斷嘗試,我發現提取點雲的過程基本上不會出錯,出錯的原因應該是在變換矩陣上。

果然

// 多視角下的點雲獲取程式

//讀取cad模型

vtksmartpointerreader = vtksmartpointer::new();

reader->setfilename("mesh1.stl");

reader->update();

vtksmartpointerpolydata = vtksmartpointer::new();

polydata = reader->getoutput();

polydata->getnumberofpoints();

//***單視角點雲獲取

//主要是renderviewtesselatedsphere的引數設定

//輸入

float resx = 400; //顯示視點圖窗的x大小 解析度,值多大,採集的點越多

float resy = resx; //顯示視點圖窗的y大小

std::vector, eigen::aligned_allocator> > views_xyz;// 各視點點雲對應的xyz資訊

//輸出

std::vector> poses;// 從目標座標變換到視點相機座標

std::vectorentropies;//0-1之間,視點看到模型的百分比

//輸入

int tesselation_level = 0;//對於原始二十面體三角形面的分割數,如果設為0,則是原始二十面體,設為1,每個三角形面會被分為4個三角形

float view_angle = 90;//虛擬相機的視場

float radius_sphere = 0.5;//radius_sphere半徑

bool use_vertices = true;//設為true,則使用頂點,得到12個視角(tesselation_level =0)或42個視角(tesselation_level =1),設為false,則使用面,得到得到20個視角(tesselation_level =0)或80個視角(tesselation_level =1)

//pclvisualizer 顯示

pcl::visualization::pclvisualizer vis;

vis.addmodelfrompolydata(polydata, "mesh", 0);

vis.setrepresentationtosu***ceforallactors();//以麵片形式顯示

vis.renderviewtesselatedsphere(resx, resy, views_xyz, poses, entropies, tesselation_level, view_angle, radius_sphere, use_vertices);//顯示個角度點雲

//儲存

for (int i = 0; i < views_xyz.size(); i++)

//顯示原stl檔案

while (!vis.wasstopped())

pcl畫圓球 基於PCL繪製模型並渲染

前言 拋開演算法層面不談,要利用pcl庫中pclvisualizer視覺化類,顯示出不同模型並對模型做出不同渲染,製作出豐富的視覺化效果以增強自己應用的功能。下面將對如何新增立方體模型和圓球模型到視窗並渲染進行乙個大概描述。立方體模型 向視窗新增乙個立方體模型並渲染,只顯示線框。若不要顯示線框將下面...

pcl畫圓球 基於PCL繪製模型並渲染

前言 拋開演算法層面不談,要利用pcl庫中pclvisualizer視覺化類,顯示出不同模型並對模型做出不同渲染,製作出豐富的視覺化效果以增強自己應用的功能。下面將對如何新增立方體模型和圓球模型到視窗並渲染進行乙個大概描述。立方體模型 向視窗新增乙個立方體模型並渲染,只顯示線框。若不要顯示線框將下面...

PCL之平面分割模型

展示 include include include include include include include include using namespace std using pointt pcl pointxyz int main 建立分割時所需要的模型係數物件,coefficients...