PCL 可视化

简介: 可视化(visualization)是利用计算机图形学和图像处理技术,将数据转换图像在屏幕上显示出来,并进行交互处理的的理论,方法和技术,pcl_visualization库建立了能够快速建立原型的目的和可视化算法对三维点云数据操作的结果。

可视化(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>   //类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;
}

编译结果如下

 

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

相关文章
|
传感器 移动开发 物联网
【Bluetooth开发】蓝牙开发入门
【Bluetooth开发】蓝牙开发入门
564 0
|
存储 算法 调度
第六章 输入输出系统【操作系统】1
第六章 输入输出系统【操作系统】1
420 0
|
5月前
|
算法 安全 Java
2025 校招必看:Java 开发面试核心知识点深度解析及最新笔面试题汇总
本文针对2025校招Java开发面试,系统梳理了Java基础、集合框架、多线程并发、JVM等核心知识点,并附带最新笔面试题。内容涵盖封装、继承、多态、异常处理、集合类使用、线程同步机制、JVM内存模型及垃圾回收算法等。同时深入探讨Spring、数据库(MySQL索引优化、Redis持久化)、分布式系统(CAP理论、分布式事务)等相关知识。通过理论结合实例解析,帮助考生全面掌握面试要点,提升实战能力,为成功拿下Offer奠定坚实基础。
624 3
|
8月前
|
数据采集 缓存 搜索推荐
NewsNow:开源个性化新闻聚合平台
NewsNow是一个功能强大且易于上手的新闻聚合项目,通过简单的部署步骤,你就可以拥有一个属于自己的个性化新闻聚合平台。无论是学习TypeScript、了解Web开发,还是打造专属的新闻阅读工具,NewsNow都是一个不错的选择。
514 2
NewsNow:开源个性化新闻聚合平台
|
机器学习/深度学习 存储 人工智能
压缩大型语言模型(LLMs):缩小10倍、性能保持不变
尽管大规模语言模型(LLMs)在多种应用场景中表现出色,但其庞大的规模也带来了实际部署难题。本文探讨了通过模型压缩技术解决这些问题的方法,介绍了量化、剪枝和知识蒸馏三种主要压缩技术,并通过具体Python代码示例展示了如何将一个100M参数的文本分类模型压缩至52.8M参数,再通过4位量化进一步减小至原来的1/7,同时保持甚至提升性能。示例代码展示了从数据预处理、模型训练到评估的完整流程,证明了压缩技术的有效性。
741 6
|
机器学习/深度学习 运维 Kubernetes
运维之道:从新手到专家的转变
【10月更文挑战第24天】 本文旨在探讨运维人员如何从初学者成长为领域专家,通过分析运维行业的现状、面临的挑战以及必备技能,提供一系列实用的建议和策略。文章强调了持续学习、实践经验积累和技术趋势把握的重要性,并结合具体案例,展示了运维专家的成长路径。
|
存储 Windows
基于flutter3.22+getx手机端os系统管理FlutterOSX
flutter3-osx原创研发手机桌面式OA管理系统新解决方案模式。
240 5
|
缓存 负载均衡 监控
Nginx性能调优5招35式不可不知的策略实战
以上 V 哥总结的5个方面关于 Nginx性能调优的策略,实际应用中需要结合实际项目的情况来测试,希望对你有帮助,欢迎关注威哥爱编程,技术路上我们一起成长。
414 0
|
移动开发 前端开发 JavaScript
🍊深入理解前端动画
🍊深入理解前端动画
591 1
🍊深入理解前端动画
|
JSON API 开发者
简化 HTTP 请求:深入了解 HTTP Template(HTTP 模板)
在现代的应用程序开发中,与远程服务器进行 HTTP 请求是常见的操作,用于获取数据、发送请求等。为了简化这一过程,HTTP Template(HTTP 模板)应运而生,它提供了一种方便的方式来执行 HTTP 请求,降低了开发复杂度。在本文中,我们将详细介绍 HTTP Template 的特性、用法以及在实际应用中的优势。
735 0