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

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

相关文章
|
2月前
|
C++
C++ PCL 将一个点云投影到一个由法向量和点确定的平面
C++ PCL 将一个点云投影到一个由法向量和点确定的平面
41 0
|
4月前
|
机器学习/深度学习 算法 数据挖掘
基于凹凸性PCL—低层次视觉
基于凹凸性PCL—低层次视觉
43 0
|
C++ Python
C++ PCL三维点云物体目标识别
C++ PCL三维点云物体目标识别
758 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语句去掉即可。
3497 0
|
编解码 数据可视化 数据挖掘
PCL特征点与配准(1)
关于输入一个具体的物体的点云,从场景中找出与该物体点云相匹配的,这种方法可以用来抓取指定的物体等等,具体的代码的解释如下,需要用到的一些基础的知识,在之前的博客中都有提及,其中用到的一些方法可以翻阅前面的博客,当然有问题可以关注公众号,与众多爱好者一起交流 具体的代码实现 #include #include //点云类型头文件 #include //对应表示两个实体之间的匹配(例如,点,描述符等)。
2447 0
|
数据可视化 算法
PCL点云配准(2)
(1)正态分布变换进行配准(normal Distributions Transform) 介绍关于如何使用正态分布算法来确定两个大型点云之间的刚体变换,正态分布变换算法是一个配准算法,它应用于三维点的统计模型,使用标准最优化技术来确定两个点云间的最优匹配,因为其在配准的过程中不利用对应点的特征计算和匹配,所以时间比其他方法比较快, 对于代码的解析 /* 使用正态分布变换进行配准的实验 。
2296 0
|
存储 算法 数据可视化
PCL点云配准(1)
在逆向工程,计算机视觉,文物数字化等领域中,由于点云的不完整,旋转错位,平移错位等,使得要得到的完整的点云就需要对局部点云进行配准,为了得到被测物体的完整数据模型,需要确定一个合适的坐标系,将从各个视角得到的点集合并到统一的坐标系下形成一个完整的点云,然后就可以方便进行可视化的操作,这就是点云数据的配准。
2527 0
|
存储 数据挖掘 索引
PCL点云分割(1)
点云分割是根据空间,几何和纹理等特征对点云进行划分,使得同一划分内的点云拥有相似的特征,点云的有效分割往往是许多应用的前提,例如逆向工作,CAD领域对零件的不同扫描表面进行分割,然后才能更好的进行空洞修复曲面重建,特征描述和提取,进而进行基于3D内容的检索,组合重用等。
2060 0