日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

PCL经典例程

發(fā)布時(shí)間:2025/3/16 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PCL经典例程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、用到的頭文件:

#include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL) VTK_MODULE_INIT(vtkInteractionStyle) VTK_MODULE_INIT(vtkRenderingFreeType)#include <iostream> #include <boost/thread/thread.hpp> #include <pcl/common/common_headers.h> #include <pcl/common/common_headers.h> #include <pcl/features/normal_3d.h> #include <pcl/io/pcd_io.h> //讀取PCD文件 #include <pcl/io/vtk_lib_io.h> //讀取Ploy文件 #include <pcl/visualization/pcl_visualizer.h> #include <pcl/console/parse.h>

2、基本的點(diǎn)云可視化操作

boost::shared_ptr<pcl::visualization::PCLVisualizer> simpleVis(pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud) {// -----Open 3D viewer and add point cloud//創(chuàng)建視窗對(duì)象并給標(biāo)題欄設(shè)置一個(gè)名稱(chēng)“3D Viewer”并將它設(shè)置為boost::shared_ptr智能共享指針,這樣可以保證指針在程序中全局使用,而不引起內(nèi)存錯(cuò)誤boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));//設(shè)置視窗的背景色,可以任意設(shè)置RGB的顏色,這里是設(shè)置為黑色viewer->setBackgroundColor(0, 0, 0);/*這是最重要的一行,我們將點(diǎn)云添加到視窗對(duì)象中,并定一個(gè)唯一的字符串作為ID 號(hào),利用此字符串保證在其他成員中也能標(biāo)志引用該點(diǎn)云,多次調(diào)用addPointCloud可以實(shí)現(xiàn)多個(gè)點(diǎn)云的添加,每調(diào)用一次就會(huì)創(chuàng)建一個(gè)新的ID號(hào),如果想更新一個(gè)已經(jīng)顯示的點(diǎn)云,必須先調(diào)用removePointCloud(),并提供需要更新的點(diǎn)云ID 號(hào)*/viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud");//用于改變顯示點(diǎn)云的尺寸,可以利用該方法控制點(diǎn)云在視窗中的顯示方法,viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");//查看復(fù)雜的點(diǎn)云,經(jīng)常讓人感到?jīng)]有方向感,為了保持正確的坐標(biāo)判斷,需要顯示坐標(biāo)系統(tǒng)方向,可以通過(guò)使用X(紅色)//Y(綠色 )Z (藍(lán)色)圓柱體代表坐標(biāo)軸的顯示方式來(lái)解決,圓柱體的大小可以通過(guò)scale參數(shù)來(lái)控制,本例中scale設(shè)置為1.0viewer->addCoordinateSystem(1.0);//通過(guò)設(shè)置照相機(jī)參數(shù)使得從默認(rèn)的角度和方向觀察點(diǎn)云viewer->initCameraParameters();return (viewer); }

3、可視化彩色點(diǎn)云的顏色特征?

boost::shared_ptr<pcl::visualization::PCLVisualizer> rgbVis(pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr cloud) {boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(0, 0, 0);pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);viewer->addPointCloud<pcl::PointXYZRGB>(cloud, rgb, "sample cloud");viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");viewer->addCoordinateSystem(1.0);viewer->initCameraParameters();return (viewer); }

4、自定義點(diǎn)云的顏色特征(自定義點(diǎn)云顏色)

boost::shared_ptr<pcl::visualization::PCLVisualizer> customColourVis(pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud) {boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(0, 0, 0);//創(chuàng)建一個(gè)自定義的顏色處理器PointCloudColorHandlerCustom對(duì)象,并設(shè)置顏色為純綠色pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> single_color(cloud, 0, 255, 0);//addPointCloud<>()完成對(duì)顏色處理器對(duì)象的傳遞viewer->addPointCloud<pcl::PointXYZ>(cloud, single_color, "sample cloud");viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");viewer->addCoordinateSystem(1.0);viewer->initCameraParameters();return (viewer); }

5、可視化點(diǎn)云法線(xiàn)

//顯示法線(xiàn)是理解點(diǎn)云的一個(gè)重要步驟,點(diǎn)云法線(xiàn)特征是非常重要的基礎(chǔ)特征,PCL visualizer可視化類(lèi)可用于繪制法線(xiàn), //也可以繪制表征點(diǎn)云的其他特征,比如主曲率和幾何特征,normalsVis函數(shù)中演示了如何實(shí)現(xiàn)點(diǎn)云的法線(xiàn) boost::shared_ptr<pcl::visualization::PCLVisualizer> normalsVis(pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr cloud, pcl::PointCloud<pcl::Normal>::ConstPtr normals) {boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(0, 0, 0);pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);viewer->addPointCloud<pcl::PointXYZRGB>(cloud, rgb, "sample cloud");viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");//實(shí)現(xiàn)對(duì)點(diǎn)云法線(xiàn)的顯示viewer->addPointCloudNormals<pcl::PointXYZRGB, pcl::Normal>(cloud, normals, 10, 0.05, "normals");viewer->addCoordinateSystem(1.0);viewer->initCameraParameters();return (viewer); }

?6、繪制普通形狀

//PCL visualizer可視化類(lèi)允許用戶(hù)在視窗中繪制一般圖元,這個(gè)類(lèi)常用于顯示點(diǎn)云處理算法的可視化結(jié)果,例如 通過(guò)可視化球體 //包圍聚類(lèi)得到的點(diǎn)云集以顯示聚類(lèi)結(jié)果,shapesVis函數(shù)用于實(shí)現(xiàn)添加形狀到視窗中,添加了四種形狀:從點(diǎn)云中的一個(gè)點(diǎn)到最后一個(gè)點(diǎn) //之間的連線(xiàn),原點(diǎn)所在的平面,以點(diǎn)云中第一個(gè)點(diǎn)為中心的球體,沿Y軸的椎體 boost::shared_ptr<pcl::visualization::PCLVisualizer> shapesVis(pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr cloud) {boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(0, 0, 0);pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);viewer->addPointCloud<pcl::PointXYZRGB>(cloud, rgb, "sample cloud");viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");viewer->addCoordinateSystem(1.0);viewer->initCameraParameters();/************************************************************************************************繪制形狀的實(shí)例代碼,繪制點(diǎn)之間的連線(xiàn),*************************************************************************************************/viewer->addLine<pcl::PointXYZRGB>(cloud->points[0],cloud->points[cloud->size() - 1], "line");//添加點(diǎn)云中第一個(gè)點(diǎn)為中心,半徑為0.2的球體,同時(shí)可以自定義顏色viewer->addSphere(cloud->points[0], 0.2, 0.5, 0.5, 0.0, "sphere");//---------------------------------------//-----Add shapes at other locations添加繪制平面使用標(biāo)準(zhǔn)平面方程ax+by+cz+d=0來(lái)定義平面,這個(gè)平面以原點(diǎn)為中心,方向沿著Z方向-----//---------------------------------------pcl::ModelCoefficients coeffs;coeffs.values.push_back(0.0);coeffs.values.push_back(0.0);coeffs.values.push_back(1.0);coeffs.values.push_back(0.0);viewer->addPlane(coeffs, "plane");//添加錐形的參數(shù)coeffs.values.clear();coeffs.values.push_back(0.3);coeffs.values.push_back(0.3);coeffs.values.push_back(0.0);coeffs.values.push_back(0.0);coeffs.values.push_back(1.0);coeffs.values.push_back(0.0);coeffs.values.push_back(5.0);viewer->addCone(coeffs, "cone");return (viewer); }

7、多窗口顯示多個(gè)點(diǎn)云

//viewportsVis函數(shù)演示如何用多視角來(lái)顯示點(diǎn)云計(jì)算法線(xiàn)的方法結(jié)果對(duì)比 boost::shared_ptr<pcl::visualization::PCLVisualizer> viewportsVis(pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr cloud, pcl::PointCloud<pcl::Normal>::ConstPtr normals1, pcl::PointCloud<pcl::Normal>::ConstPtr normals2) {boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->initCameraParameters();//以上是創(chuàng)建視圖的標(biāo)準(zhǔn)代碼int v1(0); //創(chuàng)建新的視口viewer->createViewPort(0.0, 0.0, 0.5, 1.0, v1); //4個(gè)參數(shù)分別是X軸的最小值,最大值,Y軸的最小值,最大值,取值0-1,v1是標(biāo)識(shí)viewer->setBackgroundColor(0, 0, 0, v1); //設(shè)置視口的背景顏色viewer->addText("Radius: 0.01", 10, 10, "v1 text", v1); //添加一個(gè)標(biāo)簽區(qū)別其他窗口 利用RGB顏色著色器并添加點(diǎn)云到視口中pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);viewer->addPointCloud<pcl::PointXYZRGB>(cloud, rgb, "sample cloud1", v1);//對(duì)第二視口做同樣的操作,使得做創(chuàng)建的點(diǎn)云分布于右半窗口,將該視口背景賦值于灰色,以便明顯區(qū)別,雖然添加同樣的點(diǎn)云,給點(diǎn)云自定義顏色著色int v2(0);viewer->createViewPort(0.5, 0.0, 1.0, 1.0, v2);viewer->setBackgroundColor(0.3, 0.3, 0.3, v2);viewer->addText("Radius: 0.1", 10, 10, "v2 text", v2);pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZRGB> single_color(cloud, 0, 255, 0);viewer->addPointCloud<pcl::PointXYZRGB>(cloud, single_color, "sample cloud2", v2);//為所有視口設(shè)置屬性,viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud1");viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud2");viewer->addCoordinateSystem(1.0);//添加法線(xiàn) 每個(gè)視圖都有一組對(duì)應(yīng)的法線(xiàn)viewer->addPointCloudNormals<pcl::PointXYZRGB, pcl::Normal>(cloud, normals1, 10, 0.05, "normals1", v1);viewer->addPointCloudNormals<pcl::PointXYZRGB, pcl::Normal>(cloud, normals2, 10, 0.05, "normals2", v2);return (viewer); }

8、鼠標(biāo)事件

//每次響應(yīng)這種事件都會(huì)在鼠標(biāo)按下的位置上生成一個(gè)文本標(biāo)簽 unsigned int text_id = 0; void keyboardEventOccurred(const pcl::visualization::KeyboardEvent &event,void* viewer_void) {pcl::visualization::PCLVisualizer *viewer = static_cast<pcl::visualization::PCLVisualizer *> (viewer_void);if (event.getKeySym() == "r" && event.keyDown()){std::cout << "r was pressed => removing all text" << std::endl;char str[512];for (unsigned int i = 0; i < text_id; ++i){sprintf(str, "text#%03d", i);viewer->removeShape(str);}text_id = 0;} }

9、鍵盤(pán)事件

//所以在PCL中視窗中注冊(cè)事件響應(yīng)回調(diào)函數(shù),不會(huì)覆蓋其他成員對(duì)同一事件的響應(yīng) void mouseEventOccurred (const pcl::visualization::MouseEvent &event,void* viewer_void) {pcl::visualization::PCLVisualizer *viewer = static_cast<pcl::visualization::PCLVisualizer *> (viewer_void);if (event.getButton () == pcl::visualization::MouseEvent::LeftButton &&event.getType () == pcl::visualization::MouseEvent::MouseButtonRelease){std::cout << "Left mouse button released at position (" << event.getX () << ", " << event.getY () << ")" << std::endl;char str[512];sprintf (str, "text#%03d", text_id ++);viewer->addText ("clicked here", event.getX (), event.getY (), str);} }

10、自定義交互

//多數(shù)情況下,默認(rèn)的鼠標(biāo)和鍵盤(pán)交互設(shè)置不能滿(mǎn)足用戶(hù)的需求,用戶(hù)想擴(kuò)展函數(shù)的某一些功能,比如按下鍵盤(pán)時(shí)保存點(diǎn)云的信息,或者通過(guò)鼠標(biāo)確定點(diǎn)云的位置,interactionCustomizationVis 函數(shù)進(jìn)行演示如何捕捉鼠標(biāo)和鍵盤(pán)事件,在窗口點(diǎn)擊,將會(huì)顯示一個(gè)2D的文本標(biāo)簽,按下r健出去文本boost::shared_ptr<pcl::visualization::PCLVisualizer> interactionCustomizationVis () {boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));viewer->setBackgroundColor (0, 0, 0);//以上是實(shí)例化視窗的標(biāo)準(zhǔn)代碼viewer->addCoordinateSystem (1.0);//分別注冊(cè)響應(yīng)鍵盤(pán)和鼠標(biāo)事件,keyboardEventOccurred mouseEventOccurred回調(diào)函數(shù),需要將boost::shared_ptr強(qiáng)制轉(zhuǎn)換為void*viewer->registerKeyboardCallback (keyboardEventOccurred, (void*)viewer.get ());viewer->registerMouseCallback (mouseEventOccurred, (void*)viewer.get ());return (viewer); }

?完整代碼

#include <iostream> #include <boost/thread/thread.hpp> #include <pcl/common/common_headers.h> #include <pcl/common/common_headers.h> #include <pcl/features/normal_3d.h> #include <pcl/io/pcd_io.h> #include <pcl/visualization/pcl_visualizer.h> #include <pcl/console/parse.h> // 幫助 void printUsage(const char* progName) {std::cout << "\n\nUsage: " << progName << " [options]\n\n"<< "Options:\n"<< "-------------------------------------------\n"<< "-h this help\n"<< "-s Simple visualisation example\n"<< "-r RGB colour visualisation example\n"<< "-c Custom colour visualisation example\n"<< "-n Normals visualisation example\n"<< "-a Shapes visualisation example\n"<< "-v Viewports example\n"<< "-i Interaction Customization example\n"<< "\n\n"; }//Simple visualisation example boost::shared_ptr<pcl::visualization::PCLVisualizer> simpleVis(pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud) {//創(chuàng)建3D窗口并添加點(diǎn)云 boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(0, 0, 0);viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud");viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "sample cloud");viewer->addCoordinateSystem(1.0);viewer->initCameraParameters();return (viewer); }//RGB colour visualisation example boost::shared_ptr<pcl::visualization::PCLVisualizer> rgbVis(pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr cloud) {//創(chuàng)建3D窗口并添加點(diǎn)云 boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(0, 0, 0);pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);viewer->addPointCloud<pcl::PointXYZRGB>(cloud, rgb, "sample cloud");viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");viewer->addCoordinateSystem(1.0);viewer->initCameraParameters();return (viewer); }//Custom colour visualisation example boost::shared_ptr<pcl::visualization::PCLVisualizer> customColourVis(pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud) {//創(chuàng)建3D窗口并添加點(diǎn)云 boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(0, 0, 0);pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> single_color(cloud, 0, 255, 0);viewer->addPointCloud<pcl::PointXYZ>(cloud, single_color, "sample cloud");viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");viewer->addCoordinateSystem(1.0);viewer->initCameraParameters();return (viewer); }//Normals visualisation example boost::shared_ptr<pcl::visualization::PCLVisualizer> normalsVis(pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr cloud, pcl::PointCloud<pcl::Normal>::ConstPtr normals) {//創(chuàng)建3D窗口并添加點(diǎn)云其包括法線(xiàn) boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(0, 0, 0);pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);viewer->addPointCloud<pcl::PointXYZRGB>(cloud, rgb, "sample cloud");viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");viewer->addPointCloudNormals<pcl::PointXYZRGB, pcl::Normal>(cloud, normals, 10, 0.05, "normals");viewer->addCoordinateSystem(1.0);viewer->initCameraParameters();return (viewer); }//Shapes visualisation example boost::shared_ptr<pcl::visualization::PCLVisualizer> shapesVis(pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr cloud) {//創(chuàng)建3D窗口并添加點(diǎn)云 boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(0, 0, 0);pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);viewer->addPointCloud<pcl::PointXYZRGB>(cloud, rgb, "sample cloud");viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");viewer->addCoordinateSystem(1.0);viewer->initCameraParameters();//在點(diǎn)云上添加直線(xiàn)和球體模型 viewer->addLine<pcl::PointXYZRGB>(cloud->points[0],cloud->points[cloud->size() - 1], "line");viewer->addSphere(cloud->points[0], 0.2, 0.5, 0.5, 0.0, "sphere");//在其他位置添加基于模型參數(shù)的平面及圓錐體 pcl::ModelCoefficients coeffs;coeffs.values.push_back(0.0);coeffs.values.push_back(0.0);coeffs.values.push_back(1.0);coeffs.values.push_back(0.0);viewer->addPlane(coeffs, "plane");coeffs.values.clear();coeffs.values.push_back(0.3);coeffs.values.push_back(0.3);coeffs.values.push_back(0.0);coeffs.values.push_back(0.0);coeffs.values.push_back(1.0);coeffs.values.push_back(0.0);coeffs.values.push_back(5.0);viewer->addCone(coeffs, "cone");return (viewer); }//Viewports example boost::shared_ptr<pcl::visualization::PCLVisualizer> viewportsVis(pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr cloud, pcl::PointCloud<pcl::Normal>::ConstPtr normals1, pcl::PointCloud<pcl::Normal>::ConstPtr normals2) {// 創(chuàng)建3D窗口并添加顯示點(diǎn)云其包括法線(xiàn) boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->initCameraParameters();int v1(0);viewer->createViewPort(0.0, 0.0, 0.5, 1.0, v1);viewer->setBackgroundColor(0, 0, 0, v1);viewer->addText("Radius: 0.01", 10, 10, "v1 text", v1);pcl::visualization::PointCloudColorHandlerRGBField<pcl::PointXYZRGB> rgb(cloud);viewer->addPointCloud<pcl::PointXYZRGB>(cloud, rgb, "sample cloud1", v1);int v2(0);viewer->createViewPort(0.5, 0.0, 1.0, 1.0, v2);viewer->setBackgroundColor(0.3, 0.3, 0.3, v2);viewer->addText("Radius: 0.1", 10, 10, "v2 text", v2);pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZRGB> single_color(cloud, 0, 255, 0);viewer->addPointCloud<pcl::PointXYZRGB>(cloud, single_color, "sample cloud2", v2);viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud1");viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud2");viewer->addCoordinateSystem(1.0);viewer->addPointCloudNormals<pcl::PointXYZRGB, pcl::Normal>(cloud, normals1, 10, 0.05, "normals1", v1);viewer->addPointCloudNormals<pcl::PointXYZRGB, pcl::Normal>(cloud, normals2, 10, 0.05, "normals2", v2);return (viewer); }unsigned int text_id = 0; void keyboardEventOccurred(const pcl::visualization::KeyboardEvent &event,void* viewer_void) {boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer = *static_cast<boost::shared_ptr<pcl::visualization::PCLVisualizer> *> (viewer_void);if (event.getKeySym() == "r" && event.keyDown()){std::cout << "r was pressed => removing all text" << std::endl;char str[512];for (unsigned int i = 0; i < text_id; ++i){sprintf(str, "text#%03d", i);viewer->removeShape(str);}text_id = 0;} }void mouseEventOccurred(const pcl::visualization::MouseEvent &event,void* viewer_void) {boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer = *static_cast<boost::shared_ptr<pcl::visualization::PCLVisualizer> *> (viewer_void);if (event.getButton() == pcl::visualization::MouseEvent::LeftButton &&event.getType() == pcl::visualization::MouseEvent::MouseButtonRelease){std::cout << "Left mouse button released at position (" << event.getX() << ", " << event.getY() << ")" << std::endl;char str[512];sprintf(str, "text#%03d", text_id++);viewer->addText("clicked here", event.getX(), event.getY(), str);} }//Interaction Customization example boost::shared_ptr<pcl::visualization::PCLVisualizer> interactionCustomizationVis() {boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(0, 0, 0);viewer->addCoordinateSystem(1.0);viewer->registerKeyboardCallback(keyboardEventOccurred, (void*)&viewer);viewer->registerMouseCallback(mouseEventOccurred, (void*)&viewer);return (viewer); } // -----Main----- int main(int argc, char** argv) {// 解析命令行參數(shù) if (pcl::console::find_argument(argc, argv, "-h") >= 0){printUsage(argv[0]);return 0;}bool simple(false), rgb(false), custom_c(false), normals(false),shapes(false), viewports(false), interaction_customization(false);if (pcl::console::find_argument(argc, argv, "-s") >= 0){simple = true;std::cout << "Simple visualisation example\n";}else if (pcl::console::find_argument(argc, argv, "-c") >= 0){custom_c = true;std::cout << "Custom colour visualisation example\n";}else if (pcl::console::find_argument(argc, argv, "-r") >= 0){rgb = true;std::cout << "RGB colour visualisation example\n";}else if (pcl::console::find_argument(argc, argv, "-n") >= 0){normals = true;std::cout << "Normals visualisation example\n";}else if (pcl::console::find_argument(argc, argv, "-a") >= 0){shapes = true;std::cout << "Shapes visualisation example\n";}else if (pcl::console::find_argument(argc, argv, "-v") >= 0){viewports = true;std::cout << "Viewports example\n";}else if (pcl::console::find_argument(argc, argv, "-i") >= 0){interaction_customization = true;std::cout << "Interaction Customization example\n";}else{printUsage(argv[0]);return 0;}// 自行創(chuàng)建一隨機(jī)點(diǎn)云 pcl::PointCloud<pcl::PointXYZ>::Ptr basic_cloud_ptr(new pcl::PointCloud<pcl::PointXYZ>);pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr(new pcl::PointCloud<pcl::PointXYZRGB>);std::cout << "Genarating example point clouds.\n\n";// 以橢圓為邊線(xiàn)沿z軸拉伸獲取其點(diǎn)云,并賦予紅綠藍(lán)漸變色。 uint8_t r(255), g(15), b(15);for (float z(-1.0); z <= 1.0; z += 0.05){for (float angle(0.0); angle <= 360.0; angle += 5.0){pcl::PointXYZ basic_point;basic_point.x = 0.5 * cosf(pcl::deg2rad(angle));basic_point.y = sinf(pcl::deg2rad(angle));basic_point.z = z;basic_cloud_ptr->points.push_back(basic_point);pcl::PointXYZRGB point;point.x = basic_point.x;point.y = basic_point.y;point.z = basic_point.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);point_cloud_ptr->points.push_back(point);}if (z < 0.0){r -= 12;g += 12;}else{g -= 12;b += 12;}}basic_cloud_ptr->width = (int)basic_cloud_ptr->points.size();basic_cloud_ptr->height = 1;point_cloud_ptr->width = (int)point_cloud_ptr->points.size();point_cloud_ptr->height = 1;// 0.05為搜索半徑獲取點(diǎn)云法線(xiàn) pcl::NormalEstimation<pcl::PointXYZRGB, pcl::Normal> ne;ne.setInputCloud(point_cloud_ptr);pcl::search::KdTree<pcl::PointXYZRGB>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZRGB>());ne.setSearchMethod(tree);pcl::PointCloud<pcl::Normal>::Ptr cloud_normals1(new pcl::PointCloud<pcl::Normal>);ne.setRadiusSearch(0.05);ne.compute(*cloud_normals1);// 0.1為搜索半徑獲取點(diǎn)云法線(xiàn) pcl::PointCloud<pcl::Normal>::Ptr cloud_normals2(new pcl::PointCloud<pcl::Normal>);ne.setRadiusSearch(0.1);ne.compute(*cloud_normals2);boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;if (simple){viewer = simpleVis(basic_cloud_ptr);}else if (rgb){viewer = rgbVis(point_cloud_ptr);}else if (custom_c){viewer = customColourVis(basic_cloud_ptr);}else if (normals){viewer = normalsVis(point_cloud_ptr, cloud_normals2);}else if (shapes){viewer = shapesVis(point_cloud_ptr);}else if (viewports){viewer = viewportsVis(point_cloud_ptr, cloud_normals1, cloud_normals2);}else if (interaction_customization){viewer = interactionCustomizationVis();}// 主循環(huán) while (!viewer->wasStopped()){viewer->spinOnce(100);boost::this_thread::sleep(boost::posix_time::microseconds(100000));} }

?

總結(jié)

以上是生活随笔為你收集整理的PCL经典例程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品一区二区av日韩在线 | 第四色在线视频 | 伊人久久一区 | 国产毛片毛片毛片毛片毛片 | 国产九一精品 | 亚洲美女自拍偷拍 | 制服.丝袜.亚洲.中文.综合懂 | 中文字幕一区二区三区人妻不卡 | 国产女人精品 | 一个人在线免费观看www | 久久精品视频免费观看 | 香蕉视频在线免费播放 | 手机在线精品视频 | 在线视频精品免费 | 国产精品二区一区二区aⅴ污介绍 | 久久99视频精品 | 色婷婷成人| 卡一卡二卡三 | 中文天堂在线视频 | 男人猛进女人爽的大叫 | 丝袜操 | 成人av播放 | 少妇扒开粉嫩小泬视频 | 亚洲欧美在线一区二区 | av在线首页 | 少妇粉嫩小泬白浆流出 | 国产欧美精品区一区二区三区 | 欧美乱妇狂野欧美在线视频 | 亚洲精品天堂成人片av在线播放 | 免费看黄av| 91免费视频入口 | 免费在线观看污网站 | 国产自产精品 | 日韩av免费播放 | 鲁鲁狠狠狠7777一区二区 | 天堂av8| 乳女教师の诱惑julia | 久久综合一区二区三区 | 五月婷婷六月综合 | 国产乱码久久久 | 国产一区二区三区视频在线观看 | 亚洲一区二区精品在线观看 | 国产在线视频二区 | 久久久看 | 国产高清一区二区三区四区 | 日韩欧美一区二 | 黄色在线观看国产 | 在线免费观看污视频 | 色香色香欲天天天影视综合网 | 欧美 日韩 国产 成人 在线观看 | 毛片在线不卡 | 婷婷激情小说 | 99久久99久久精品国产片果冻 | 日韩一区欧美 | 久久免费小视频 | 亚洲男人的天堂在线观看 | 韩国理论午夜 | 蜜乳av一区 | 打开免费观看视频在线播放 | 请用你的手指扰乱我吧 | 久久精品女人 | 国产精品人人爽 | 亚洲精品国产日韩 | 99热这里是精品 | av青青草原 | 亚洲在线电影 | 亚洲三级大片 | 老子影院午夜伦不卡大全 | 一区二区在线视频 | 亚洲精品成人片在线观看精品字幕 | 无码人妻精品一区二区三区99v | 不卡在线 | 大学生高潮无套内谢视频 | 欧美性色视频 | 精品人妻人伦一区二区有限公司 | 日韩精品一区二区三区av | 在线视频亚洲色图 | 欧美色淫| 亚洲av无码国产精品麻豆天美 | 看全黄大色黄大片美女人 | 加勒比视频在线观看 | 国产粉嫩一区二区三区 | heyzo朝桐光一区二区 | 国产精品久久久久av | 看黄网站在线观看 | 黄色网入口 | jizz欧美大全 | 日本啪啪动态图 | 99久久综合 | 国产精品国产三级国产专区53 | 东方成人av在线 | 六月婷婷av | 国产免费www | 亚洲免费视频大全 | 能在线看的av | 亚洲一区二区三区久久 | 米奇影音 | 136福利视频导航 | 视频污在线观看 |