pcl 点云可视化

简介: pcl 点云可视化

PCL中的pcl_visualization库提供了可视化相关的数据结构和组件,包含27个类以及十多个函数,主要是为了将其它模块的算法处理后的结果直观的展现。

简单点云可视化

点云视窗类 CloudViewer 是简单显示点云的可视化工具类,可以让用户尽可能少的代码 查看 点云。
CloudViewer类不能在多线程应用程序中使用

下面介绍其实现方法

Code

#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>

需要包含的头文件

==============================================================

    //声明一个点云 指针
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
    //从PCD 中 读取点云
    pcl::io::loadPCDFile ("../maize.pcd", *cloud);

声明一个点云 指针 ;从PCD 中 读取点云

==============================================================

    /* 创建显示 类 实例 */
    pcl::visualization::CloudViewer viewer("Cloud Viewer"); 

    /* 显示点云 */
    viewer.showCloud(cloud);

创建pcl 点云 显示 类 实例
显示点云

==============================================================


     /* 回调函数执行一次   */
    viewer.runOnVisualizationThreadOnce (viewerOneOff);

回调函数执行一次

==============================================================

     /* 回调函数 显示每刷新一帧 执行一次 */
    viewer.runOnVisualizationThread (viewerPsycho);

回调函数 显示每刷新一帧 执行一次

==============================================================

   /*持续显示*/
    while (!viewer.wasStopped ())
    {
    }

==============================================================

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++;
     
     //除去 text 的id  否则会重复  打印 不出来
    viewer.removeShape ("text", 0);

    // 将变换的字符添加上去
    viewer.addText (ss.str(), 200, 300, "text", 0);

}

回调函数 显示每刷新一帧 执行一次

添加一个 数值 一直 增加 的 字符 串

==============================================================

Result

在这里插入图片描述
可以看到一个球体 , 一个变化的字符串 和一个点云。

相关文章
|
3月前
|
C++
C++ PCL 将一个点云投影到一个由法向量和点确定的平面
C++ PCL 将一个点云投影到一个由法向量和点确定的平面
103 0
|
5月前
|
机器学习/深度学习 算法 数据挖掘
基于凹凸性PCL—低层次视觉
基于凹凸性PCL—低层次视觉
58 0
|
C++ Python
C++ PCL三维点云物体目标识别
C++ PCL三维点云物体目标识别
825 1
C++ PCL三维点云物体目标识别
|
传感器 编解码 索引
|
存储 算法
|
计算机视觉 数据可视化 异构计算
Kinect2.0+Libfreenect2+PCL:实时点云显示
写在前面:生成点云前提是已经安装好了libfreenect2和PCL,网上有许多这方面的大把教程,在这里就不多赘述了。 -->ubuntu16.04,pcl1.8points.push_back( p );//将点P存入cloud 4,viewer.showCloud (cloud);//将cloud可视化 注意:将下列两个文件复制到同一个文件夹中,并在终端中依次执行cmake .,make,便会生成一个可执行文件main,输入./main,就可以显示点云,如果是一片漆黑,是因为我在代码中设置来点云的范围,将if语句去掉即可。
3539 0
|
编解码 数据可视化 数据挖掘
PCL特征点与配准(1)
关于输入一个具体的物体的点云,从场景中找出与该物体点云相匹配的,这种方法可以用来抓取指定的物体等等,具体的代码的解释如下,需要用到的一些基础的知识,在之前的博客中都有提及,其中用到的一些方法可以翻阅前面的博客,当然有问题可以关注公众号,与众多爱好者一起交流 具体的代码实现 #include #include //点云类型头文件 #include //对应表示两个实体之间的匹配(例如,点,描述符等)。
2463 0
|
存储 算法 数据可视化
PCL点云配准(1)
在逆向工程,计算机视觉,文物数字化等领域中,由于点云的不完整,旋转错位,平移错位等,使得要得到的完整的点云就需要对局部点云进行配准,为了得到被测物体的完整数据模型,需要确定一个合适的坐标系,将从各个视角得到的点集合并到统一的坐标系下形成一个完整的点云,然后就可以方便进行可视化的操作,这就是点云数据的配准。
2579 0
|
数据可视化 算法
PCL点云配准(2)
(1)正态分布变换进行配准(normal Distributions Transform) 介绍关于如何使用正态分布算法来确定两个大型点云之间的刚体变换,正态分布变换算法是一个配准算法,它应用于三维点的统计模型,使用标准最优化技术来确定两个点云间的最优匹配,因为其在配准的过程中不利用对应点的特征计算和匹配,所以时间比其他方法比较快, 对于代码的解析 /* 使用正态分布变换进行配准的实验 。
2311 0
PCL点云分割(2)
关于点云的分割算是我想做的机械臂抓取中十分重要的俄一部分,所以首先学习如果使用点云库处理我用kinect获取的点云的数据,本例程也是我自己慢慢修改程序并结合官方API 的解说实现的,其中有很多细节如果直接更改源程序,可能会因为数据类型,或者头文件等各种原因编译不过,会导致我们比较难得找出其中的错误,...
1952 0