PCL 可视化(写的很好)

匿名 (未验证) 提交于 2019-12-03 00:27:02
可视化(visualization)是利用计算机图形学和图像处理技术,将数据转换图像在屏幕上显示出来,并进行交互处理的的理论,方法和技术,

pcl_visualization库建立了能够快速建立原型的目的和可视化算法对三维点云数据操作的结果。类似于opencv的highgui例程显示二维图像,在屏幕上绘制基本的二维图形,库提供了以下几点:

(1)渲染和设置视觉特性的方法(如颜色、大小、透明度等)在PCL任意n维的点云数据集pcl::PointCloud<T> format

(2)在屏幕上绘制基本的3D形状的方法(例如,圆柱体,球体,线,多边形等),无论是从点集或参数方程;

(3)一个直方图可视化模块(pclhistogramvisualizer)的二维图;

(4)大量的几何和颜色处理pcl::PointCloud<T> datasets

pcl::RangeImage

.

pcl::visualization::CloudViewerCloudViewer实现创建点云可视化的窗口,以及相关的可视化功能

Public Member Functions

CloudViewer
~CloudViewer
showCloudColorCloud::ConstPtr
可视化窗口显示cloud对应的点云,考虑到多个点云用键值cloudname来限定是哪一个点云
wasStopped
判断用户是否已经关闭窗口,如果是则需要注销窗口
runOnVisualizationThreadVizCallable
在窗口运行期间处理x的回调函数,key为键值标识此回调函数,知道窗口关闭
runOnVisualizationThreadOnceVizCallable
值调用回调函数一次
removeVisualizationCallable
删除key对应的回调函数
registerKeyboardCallbackpcl::visualization::KeyboardEvent
注册键盘事件回调函数,cookie为回调时的参数,callback为回调函数的指针
template<typename T >
registerKeyboardCallbackpcl::visualization::KeyboardEvent
同上,其中的instance 指向是实现该回到函数的对象

pcl::visualization::CloudViewer
More...
pcl::visualization::FloatImageUtils
ProvideMore...
pcl::visualization::PCLHistogramVisualizer
More...
pcl::visualization::ImageViewerInteractorStyle
ImageViewerMore...
pcl::visualization::ImageViewer::ExitMainLoopTimerCallback
pcl::visualization::ImageViewer::ExitCallback
pcl::visualization::ImageViewer
ImageViewerMore...
pcl::visualization::PCLVisualizerInteractorStyle
PCLVisualizerInteractorStyleMore...
pcl::visualization::Figure2D
More...
pcl::visualization::PCLPainter2D
More...
pcl::visualization::PCLPlotter
More...
pcl::visualization::PCLVisualizer
More...
pcl::visualization::PointCloudColorHandler< PointT >
PointCloudMore...
pcl::visualization::PointCloudColorHandlerRandom< PointT >
PointCloudMore...
pcl::visualization::PointCloudColorHandlerCustom< PointT >
More...
pcl::visualization::PointCloudColorHandlerRGBField< PointT >
RGBMore...
pcl::visualization::PointCloudColorHandlerHSVField< PointT >
More...

应用实例

cloud_viewer.cpp:

#include <pcl/visualization/cloud_viewer.h>   //类cloud_viewer头文件申明 #include <iostream>                           //标准输入输出头文件申明 #include <pcl/io/io.h>                        //I/O相关头文件申明 #include <pcl/io/pcd_io.h>                    //PCD文件读取       /**********************************************************************************   函数是作为回调函数,在主函数中只注册一次 ,函数实现对可视化对象背景颜色的设置,添加一个圆球几何体 *********************************************************************************/ int user_data;      void  viewerOneOff (pcl::visualization::PCLVisualizer& viewer) {     viewer.setBackgroundColor (1.0, 0.5, 1.0);       //设置背景颜色     pcl::PointXYZ o;                                  //存储球的圆心位置     o.x = 1.0;     o.y = 0;     o.z = 0;     viewer.addSphere (o, 0.25, "sphere", 0);                  //添加圆球几何对象     std::cout << "i only run once" << std::endl;      }    /***********************************************************************************    作为回调函数,在主函数中注册后每帧显示都执行一次,函数具体实现在可视化对象中添加一个刷新显示字符串    *************************************************************************************/  void  viewerPsycho (pcl::visualization::PCLVisualizer& viewer) {     static unsigned count = 0;     std::stringstream ss;     ss << "Once per viewer loop: " << count++;     viewer.removeShape ("text", 0);     viewer.addText (ss.str(), 200, 300, "text", 0);          //FIXME: possible race condition here:     user_data++; }   /**************************************************************   首先加载点云文件到点云对象,并初始化可视化对象viewer,注册上面的回    调函数,执行循环直到收到关闭viewer的消息退出程序    *************************************************************/   int  main () {     pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>);    //声明cloud      pcl::io::loadPCDFile ("my_point_cloud.pcd", *cloud);         //加载点云文件          pcl::visualization::CloudViewer viewer("Cloud Viewer");      //创建viewer对象          //showCloud函数是同步的,在此处等待直到渲染显示为止     viewer.showCloud(cloud);          //该注册函数在可视化的时候只执行一次     viewer.runOnVisualizationThreadOnce (viewerOneOff);          //该注册函数在渲染输出时每次都调用     viewer.runOnVisualizationThread (viewerPsycho);     while (!viewer.wasStopped ())     {     //此处可以添加其他处理     //FIXME: Note that this is running in a separate thread from viewerPsycho     //and you should guard against race conditions yourself...     user_data++;     }     return 0; }

编译结果如下

转:https://blog.csdn.net/u013019296/article/details/70052309

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!