pcl画圆球_PCL 可视化-阿里云开发者社区

这篇博客介绍了如何使用PCL(Point Cloud Library)的pcl_visualization库进行三维点云数据的可视化。重点讲解了CloudViewer类,用于创建可视化窗口并显示点云,以及如何添加3D形状如圆球。文章还提供了示例代码,展示了如何设置背景颜色、添加几何体以及注册回调函数来更新显示内容。
摘要由CSDN通过智能技术生成

可视化(visualization)是利用计算机图形学和图像处理技术,将数据转换图像在屏幕上显示出来,并进行交互处理的的理论,方法和技术,

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

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

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

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

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

.

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

removeVisualizationCallable (const std::string &key="callable")

删除key对应的回调函数

boost::signals2::connection

注册键盘事件回调函数,cookie为回调时的参数,callback为回调函数的指针

template

boost::signals2::connection

registerKeyboardCallback (void(T::*callback)(const pcl::visualization::KeyboardEvent &, void *), T &instance, void *cookie=NULL)

同上,其中的instance 指向是实现该回到函数的对象

(2)太多了这里就贴出所有的关于可视化的类    对于类的成员就不再一一介绍

等等*****************************************8

应用实例

cloud_viewer.cpp:

#include //类cloud_viewer头文件申明

#include //标准输入输出头文件申明

#include //I/O相关头文件申明

#include //PCD文件读取

/**********************************************************************************

函数是作为回调函数,在主函数中只注册一次 ,函数实现对可视化对象背景颜色的设置,添加一个圆球几何体

*********************************************************************************/

intuser_data;voidviewerOneOff (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" <<:endl>

}/***********************************************************************************

作为回调函数,在主函数中注册后每帧显示都执行一次,函数具体实现在可视化对象中添加一个刷新显示字符串

*************************************************************************************/

voidviewerPsycho (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的消息退出程序

*************************************************************/

intmain ()

{

pcl::PointCloud<:pointxyzrgba>::Ptr cloud (new pcl::PointCloud<: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;

}

编译结果如下

未完待续*************************8888888

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值