可视化(visualization)是利用计算机图形学和图像处理技术,将数据转换图像在屏幕上显示出来,并进行交互处理的的理论,方法和技术,
pcl_visualization库建立了能够快速建立原型的目的和可视化算法对三维点云数据操作的结果。类似于opencv的highgui例程显示二维图像,在屏幕上绘制基本的二维图形,库提供了以下几点:
(1)渲染和设置视觉特性的方法(如颜色、大小、透明度等)在PCL任意n维的点云数据集pcl::PointCloud<T> format
(2)在屏幕上绘制基本的3D形状的方法(例如,圆柱体,球体,线,多边形等),无论是从点集或参数方程;
(3)一个直方图可视化模块(pclhistogramvisualizer)的二维图;
(4)大量的几何和颜色处理pcl::PointCloud<T> datasets
(5)a pcl::RangeImage 可视化模块
.
1. class pcl::visualization::CloudViewer 类CloudViewer实现创建点云可视化的窗口,以及相关的可视化功能
Public Member Functions | |
---|---|
CloudViewer (const std::string &window_name) 构建可视化点云窗口,窗口名为window_name | |
~CloudViewer () 注销窗口相关资源 | |
void | showCloud (const ColorCloud::ConstPtr &cloud, const std::string &cloudname="cloud") |
可视化窗口显示cloud对应的点云,考虑到多个点云用键值cloudname来限定是哪一个点云 | |
bool | wasStopped (int millis_to_wait=1) |
判断用户是否已经关闭窗口,如果是则需要注销窗口 | |
void | runOnVisualizationThread (VizCallable x, const std::string &key="callable") |
在窗口运行期间处理x的回调函数,key为键值标识此回调函数,知道窗口关闭 | |
void | runOnVisualizationThreadOnce (VizCallable x) |
值调用回调函数一次 | |
void | removeVisualizationCallable (const std::string &key="callable") |
删除key对应的回调函数 | |
boost::signals2::connection | registerKeyboardCallback (void(*callback)(const pcl::visualization::KeyboardEvent &, void *), void *cookie=NULL) |
注册键盘事件回调函数,cookie为回调时的参数,callback为回调函数的指针 | |
template<typename T > | |
boost::signals2::connection | registerKeyboardCallback (void(T::*callback)(const pcl::visualization::KeyboardEvent &, void *), T &instance, void *cookie=NULL) |
同上,其中的instance 指向是实现该回到函数的对象 |
(2)太多了这里就贴出所有的关于可视化的类 对于类的成员就不再一一介绍
class | pcl::visualization::CloudViewer |
---|---|
Simple point cloud visualization class. More... | |
class | pcl::visualization::FloatImageUtils |
Provide some gerneral functionalities regarding 2d float arrays, e.g., for visualization purposes More... | |
class | pcl::visualization::PCLHistogramVisualizer |
PCL histogram visualizer main class. More... | |
class | pcl::visualization::ImageViewerInteractorStyle |
An image viewer interactor style, tailored for ImageViewer. More... | |
struct | pcl::visualization::ImageViewer::ExitMainLoopTimerCallback |
struct | pcl::visualization::ImageViewer::ExitCallback |
class | pcl::visualization::ImageViewer |
ImageViewer is a class for 2D image visualization. More... | |
class | pcl::visualization::PCLVisualizerInteractorStyle |
PCLVisualizerInteractorStyle defines an unique, custom VTK based interactory style for PCL Visualizer applications. More... | |
struct | pcl::visualization::Figure2D |
Abstract class for storing figure information. More... | |
class | pcl::visualization::PCLPainter2D |
PCL Painter2D main class. More... | |
class | pcl::visualization::PCLPlotter |
PCL Plotter main class. More... | |
class | pcl::visualization::PCLVisualizer |
PCL Visualizer main class. More... | |
class | pcl::visualization::PointCloudColorHandler< PointT > |
Base Handler class for PointCloud colors. More... | |
class | pcl::visualization::PointCloudColorHandlerRandom< PointT > |
Handler for random PointCloud colors (i.e., R, G, B will be randomly chosen) More... | |
class | pcl::visualization::PointCloudColorHandlerCustom< PointT > |
Handler for predefined user colors. More... | |
class | pcl::visualization::PointCloudColorHandlerRGBField< PointT > |
RGB handler class for colors. More... | |
class | pcl::visualization::PointCloudColorHandlerHSVField< PointT > |
HSV handler class for colors. More... |
等等*****************************************8
应用实例
cloud_viewer.cpp:
#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#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);
user_data++;
} /*首先加载点云文件到点云对象,并初始化可视化对象viewer,注册上面的回调函数,执行循环直到收到关闭viewer的消息退出程序*/
int main ()
{
pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZRGBA>); //声明cloudpcl::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 ())
{ //此处可以添加其他处理
user_data++;
} return 0;
}
编译结果如下