pcl怎么根据深度显示颜色_PCL 可视化

a4cbc76b9fbf6a0f8ef392f8f524c0e1.png

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

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

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

25fdb7e795f1e468d6a80a207f83c857.png

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

b50ea60f0c5073e5e2548e9325e9f8cb.png

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

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

(5)a pcl::RangeImage 可视化模块

95b92356de18b35b0af08faf6a9c607b.png

​.

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)太多了这里就贴出所有的关于可视化的类 对于类的成员就不再一一介绍

应用实例

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;
}

编译结果如下

20cc55a0ae63508318711f6a48b2d211.png

如有疑问可以留言,评论或者关注微信公众号,后台留言加入微信交流群,和QQ群与更多的小伙伴参与分享和交流。如有错误请指正!!

acd6d2650aa3f80dc19d3ca8d29b17a1.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值