PCL入门系列 —— PCLVisualizer可视化中窗口分割、点云着色、添加文本标签及坐标轴

【PCL自学:PCLVisualizer】点云可视化工具PCLVisualizer PCLVisualizer使用 阅读详情

PCL入门系列 —— PCLVisualizer可视化中窗口分割、点云着色、添加文本标签及坐标轴


前言

随着工业自动化、智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要程度也同步激增(识别、定位、抓取、测量,缺陷检测等),而针对不同作业场景进行解决方案设计时,通常会借助PCL、OpenCV、Eigen等简单方便的开源算法库进行方案的快速验证和迭代以满足作业场景下的目标需求。

为了让对工业机器视觉方向感兴趣的同学能够少走一些弯路,故推出了此一系列简易入门教程示例,让初次使用者能够最简单直观地感受到当前所用算法模块的执行效果。

后续会逐步扩增与工业机器视觉相关的一些其它内容,如:

项目案例剖析、场景数据分析、基础算法模块、相机评测 等;

如有兴趣可加入群聊(若入群二维码被屏蔽,则可以通过Q群(1032861997)或评论、私信博主“群聊”,邀请入群),与同道同学及圈内同行一起交流讨论。

在这里插入图片描述


程序说明

展示pcl可视化类及窗口分割、点云着色、文本标签、设置点大小、添加坐标轴等功能效果;

输出结果

在这里插入图片描述

代码示例

/*
 * @File: visualization.cpp
 * @Brief: pcl course
 * @Description: 展示pcl可视化类的相关设置效果
 * @Version: 0.0.1
 * @Author: MuYv
 */
#include <iostream>
#include <string>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>



int main(int argc, char** argv){
    if(argc != 2){
        std::cout<<"Usage: exec cloud_file_path"<<std::endl;
        return -1;
    }
    const std::string kCloudFilePath = argv[1];     // ../clouds/cabinet_color_cloud.pcd

    pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_src(new pcl::PointCloud<pcl::PointXYZRGB>());
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_tmp(new pcl::PointCloud<pcl::PointXYZ>());

    // 成功返回0,失败返回-1
    if(-1 == pcl::io::loadPCDFile(kCloudFilePath,*cloud_src)){
        std::cout<<"load pcd file failed. please check it."<<std::endl;
        return -2;
    }

    // 拷贝点云数据
    pcl::copyPointCloud(*cloud_src, *cloud_tmp);

    // 创建可视化对象
    pcl::visualization::PCLVisualizer viewer("viewer");

    // 将当前窗口,拆分成横向的2个可视化窗口,以viewport区分(v1/v2)
    int v1; 
    int v2;
    //窗口参数分别对应 x_min, y_min, x_max, y_max, viewport
    viewer.createViewPort(0.0, 0.0, 0.5, 1.0, v1);  
    viewer.createViewPort(0.5, 0.0, 1.0, 1.0, v2);

    // 添加2d文字标签
    viewer.addText("v1", 10,10, 20, 1,0,0, "viewport_v1", v1);
    viewer.addText("v2", 10,10, 20, 0,1,0, "viewport_v2", v2);

    // 添加3d文字标签
    pcl::PointXYZ pos_3d_text = {0.1,0.1,0.1};
    viewer.addText3D("3d_v1", pos_3d_text, 0.1, 1,0,0, "3d_text_v1", v1);
    viewer.addText3D("3d_v2", pos_3d_text, 0.1, 0,1,0, "3d_text_v2", v2);

    // 添加坐标系
    viewer.addCoordinateSystem(0.5);    // 单位:m

    // 设置可视化窗口背景色
    viewer.setBackgroundColor(0.2,0.2,0.2);     // r,g,b  0~1之间

    // 向v1窗口中添加点云
    viewer.addPointCloud(cloud_src,"cloud_src",v1);

    // // 设置单一颜色
    // pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> color(cloud_tmp, 255, 0, 0);
    
    //按照z方向深度进行渲染(色带渐变)
    pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ> color(cloud_tmp, "z");
    
    // // 设置随机颜色(整体)
    // pcl::visualization::PointCloudColorHandlerRandom<pcl::PointXYZ> color(cloud_tmp);

    // 向v2窗口中添加点云
    viewer.addPointCloud(cloud_tmp,color,"cloud_tmp",v2);
    // 根据点云id,设置点云可视化属性,此处将可视化窗口中的点大小调整为2级
    viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "cloud_tmp");

    // 关闭窗口则退出
    while(!viewer.wasStopped()){
        viewer.spinOnce(100);
        boost::this_thread::sleep(boost::posix_time::microseconds(100000));
    }

    return 0;
}

总结

可视化类常用于开发时,对流程中点云数据的debug分析以及最终算法输出结果的简单验证;
点云着色、坐标系、点尺寸大小、2d文本标签、3d文本标签及多窗口分割等,都是常用的功能属性;


注:部分测试所用点云数据来源于网络,如有侵权,请联系博主删除,谢谢。

PCLVisualizer可视化类 注意最后一个自定义交互中viewer的shared_ptr,教程中的代码运行会报错 /* \author Geoffrey Biggs */ #include #include #include #include #include #include #include #include // 帮助 void printUsage(const char* progName) { 阅读详情

相关推荐

PCL :实现屏幕上选点并显示三维坐标(附完整源码)

PCL :实现屏幕上选点并显示三维坐标(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1152

PCL教程-PCLVisualizer可视化类的使用

原文链接:https://pcl.readthedocs.io/projects/tutorials/en/latest/pcl_visualizer.html#pcl-visualizer

DayDayUp 1万+

使用 PCL 在屏幕上选择点并显示其三维坐标

在这个示例中,我们创建了一个名为 “Point Cloud Viewer” 的 PCLVisualizer 对象,并设置了窗口的背景颜色为黑色。我们还添加了一个坐标系以帮助我们理解点云的位置。通过注册回调函数,我们可以捕获用户在点云上的选择,并从事件中提取所选点的坐标。的回调函数,用于处理用户在点云上选点的事件。当用户在窗口中单击鼠标时,回调函数会被触发,并提取所选点的坐标。你可以将点云数据保存在 PCD 格式的文件中,并在此处加载。首先,我们需要准备一个空的 PCL 窗口用于可视化点云数据。

CyberByte的博客 988

PCL可视化中向点云某点添加文字

往点云某点添加文本

mengzhilv11的博客 1041

PCL中的坐标系添加

在PCL中,我们可以使用pcl::PointCloud类来表示点云数据,并通过成员函数pcl::PointCloud::sensor_origin_和pcl::PointCloud::sensor_orientation_来添加坐标系信息。总结起来,PCL中添加坐标系的方法包括定义一个pcl::PointXYZ类型的对象来存储原点坐标,然后使用pcl::PointCloud类的成员变量sensor_origin_和sensor_orientation_来设置坐标系的位置和姿态。PCL中的坐标系添加。

PixelInk的博客 891

点云添加3D字体

在点云的可视化过程中,有时需要对点云某一个区域,显示一些字体进行解释说明,在PCL库中,有专门的函数addText3D可以在点云中显示添加3D字体;const std::string &text 需要添加的字符串,不能为中文;int xpos, int ypos 表示字体在点云中的位置;与点云有着同一个坐标系int fontsize, 字体大小;double r, double g, double b, 字体颜色,范围为0-1;const std::string &id = "" ,字体的名字;

twnkie的博客 567

点云处理的关键技术流程和常用算法

本文系统介绍了点云处理的关键技术流程和常用算法。主要内容包括:1)点云可视化方法(PCL、CloudCompare、ROS);2)去噪算法(统计滤波、半径滤波);3)滤波技术(体素滤波、直通滤波);4)配准方法(ICP、NDT);5)分割算法(RANSAC、区域生长);6)聚类技术(欧式聚类);7)特征提取(法线、FPFH);8)重建算法(Poisson、三角化)。文章详细阐述了各模块的原理、PCL实现、参数调优和应用场景,并对比了不同算法的优缺点,为点云处理提供了全面的技术参考。

weixin_42795788的博客 300

H5 获取手机GPS坐标

只要手机有GPS模块,可以用HTML5的Geolocation接口获取 在HTML5中,geolocation作为navigator的一个属性出现,它本身是一个对象,拥有三个方法: getCurrentPosition watchPosition clearWatch 1.简单 function getLocation(){ if(navigator.geolocation){ //判断是否有这个对象 navigator.geoloc

达拉崩巴斑得贝迪卜多比鲁翁_ 4668

PCL学习笔记(十二)-- PCL Visualizer可视化类

一、简介 PCL Visualizer可视化类是PCL中功能最全的可视化类,与CloudViewer可视化类相比,PCL Visualizer使用起来更加复杂,但该类具有更全面的功能,如显示法线、绘制多种形状和多个视口。下面的示例代码演示了PCL Visualizer可视化的功能,从显示单个点云开始。大多数示例代码都用于创建点云并可视化其某些特征。 二、代码分析 1)可视化单个点云 该示例应用PCL Visualizer可视化类显示单个具有XYZ信息的点云,该程序也实现了改变背景颜色和显...

不学会C++不改名 1万+

ST7789驱动实战:从SPI时序到RGB565显示的完整配置解析

本文详细解析了ST7789液晶驱动芯片的SPI时序配置与RGB565显示实现,从数据手册解读到代码实战,涵盖SPI接口配置、关键寄存器设置及完整初始化流程。通过优化DMA传输和常见问题排查,帮助开发者高效驱动ST7789显示屏,适用于嵌入式显示项目开发。

weixin_29162439的博客 183

VS2019+CAXACAD2023二次开发教程(一、环境搭建)

CAXACAD2023的二次开发相关文件和库都在的文件夹下。CAXACAD2023的默认开发环境是VS2019,如果是用VS2019的环境话,可以直接安装这个插件,安装好后就可以一键新建的项目,新建的项目会自动帮我们配置好所有的环境,并且生成必要的代码和初始的框架。(本来想用VS2022的,但配置环境太麻烦,用VS2022,增加一个环境变量是可以运行自带的例程的,但新建项目要配置的东西和环境太多,就放弃折腾了)

weixin_42968757的博客 4616

PCL:PCLVisualizer点云可视化

简介:PCLVisualizer 是 PCL 的全功能可视化类。虽然使用起来比 CloudViewer 更复杂,但它也更强大,提供了诸如显示法线、绘制形状和多个视口等功能

qq_46170379的博客 1627

微波射频学习笔记18-------偶极子天线和微波天线设计介绍

几种天线设计方法的介绍 一、偶极子天线 1.天线模型 两根紧挨着的金属导体,长度均为四分之一波长,直径均远小于波长,两导体间距也远小于波长。 2.天线性能的设计因素 ① 单个导体长度L:(光速/频率)/4=四分之一波长(在空气中传播的波长),但在导体中传播,波长会变短; ② 导体半径R:远小于波长即可,使用导电率高些的材料,市面上常见直径零点几毫米就挺好,或者用波长/200,得出一个小200的值,也算远小于波长; ③ 两导体间距S:远小于波长即可,可以比半径更小点。 以上三个变量L、R、S,均可在仿真软件

Sil_sprout 1万+

【PCL】PCLVisualizer 显示

1. 相关说明 PCL版本 AllInOne 数据文件 room_scan1.pcd 2. CMakeLists.txt # 指定最低的CMAKE版本 CMAKE_MINIMUM_REQUIRED(VERSION 3.22 FATAL_ERROR) # 创建项目 PROJECT(PCLSamples LANGUAGES CXX) # 指定CPLUSPLUS标准 SET(CMAKE_CXX_STANDARD_REQUIRED ON) SET(CMAKE_CXX_STANDARD 14) SET(CMA

zhy29563 1186

【图像增强】论文精读:Correlation Matching Transformation Transformers for UHD Image Restoration(UHDformer)

论文题目:Correlation Matching Transformation Transformers for UHD Image Restoration —— 用于UHD图像恢复的相关匹配变换变压器AAAI 2024!本文提出了一种用于超高清(UHD)图像恢复的通用变压器UHDformer。UHDformer包含两个学习空间:(a) 高分辨率空间中的学习,(b)低分辨率空间中的学习。前者学习多层次的高分辨率特征,融合低层特征,重建残差图像,后者从高分辨率特征中学习更多的代表性特征,以促进更好的恢复。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 289

中小企业办公网络配置综合实验华为设备(NAT+策略路由+OSPF+VLAN)

组网需求: 1、PC1、2、3、4均可以访问internet的lo0:8.8.8.8 2、PC1、PC4通过电信ISP访问internet;PC2、PC3通过联通ISP访问internet; 需求分析: 1、internet路由器模拟公网,8.8.8.8模拟公网IP;电信ISP、联通ISP路由器模拟电信和联通运营商;出口路由为企业出口路由器;这四个路由器直连链路之间运行ospf,配置动态路由,实现互通; 2、出口路由与三层交换直连链路运行ospf,动态同步路由信息; 3、出口路由器内网端口配..

A soul tortured by desire 7124

PCL visualizer

PCL点云库中的坐标系(CoordinateSystem) 首先介绍一下PCL点云库visualization模块中的PCLVisualizer类,它是PCL可视化3D点云的主要类,该类具有更全面的功能,如显示法线、绘制多种形状和多个视口等,其内部实现了添加各种3D对象以及交互实现等。其中addCoordinateSystem()函数可以在可视化窗口中的坐标原点(0,0,0)处添加一个红绿蓝三色的三维指示坐标轴,红色是X轴,绿色是Y轴,蓝色是Z,也就是说PCL点云库中使用的是右手三维坐标系。 代

惊鸿一博 1588

SAP 实施:Waterfall vs. Agile —— 一场“结构性矛盾“的深刻比较先说结论:在 SAP 世界里,这从来不是“谁更好“的宗教问题,而是“你的项目 DNA 是什么“的战略选择。​

SAP 实施:Waterfall vs. Agile —— 一场"结构性矛盾"的深刻比较 先说结论:在 SAP 世界里,这从来不是"谁更好"的宗教问题,而是"你的项目 DNA 是什么"的战略选择。​ SAP 早已用 SAP Activate​ 给出了官方态度——它不是纯 Agile,也不是回头去搞旧 Waterfall,而是一个带质量门的混合架构。 1. 先回到本质:两者解决的是不同维度的风险 维度 Waterfall(传统 ASAP 路线)​ Agile(SCRUM/Kanban 式迭代)​

金牌架构师 336

pcl::visualization::PCLVisualizer添加文字显示注意事项

注意 PCLVisualizer的addText()方法不支持中文显示。 viewer.addText("不支持中文显示", 20, 60, "text"); 最简单的用法,只设置文字显示的位置: pcl::visualization::PCLVisualizer viewer("点云显示"); viewer.addText("cloud", 20, 60, "text"); 复杂一点的用法,可以设置字体颜色和大小: bool addText (const std::st

DayDayUp 3450

《网络安全自学教程》- Windows基线检查加固

Windows安全配置,基线检查标准,基线加固方式

wangyuxiang946的博客 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

pcl+vtk(七)QVTKOpenGLNativeWidget中显示坐标轴

设置坐标系的原点位置设置坐标轴的总长度设置坐标轴的轴身类型(int type)0:柱状轴身1:线性轴身如果类型为0:SetCylinderRadius(double):设置柱状轴半径设置坐标轴的轴顶部类型0:圆锥体1:球体如果类型为0:SetConeResolution(double);设置锥面数设置锥半径如果类型为1:SetSphereResolution(double);设置球面数设置球半径是否显示标签设置轴标签。

m0_67254672的博客 3004

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

在PCLVisualizer中添加坐标轴和图片和颜色表

继承PCL可视化类,实现坐标轴、PNG图片、颜色表的显示 pcl::visualization::PCLVisualizer是pcl中的可视化类,支持点云显示,点云拾取,点云框选等,但是无法添加图片和颜色表。通过继承PCLVisualizer类可以灵活添加坐标轴、图片和颜色表。 参考了pcl源码之后实现了上面几个功能,效果如下。 左下角添加了坐标轴,其位置通过参数给出,固定不可移动 右上角添加了...

qq_29022265的博客 9508

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

第三周PCL学习(三)

这周学习目录 1、可视化 2、深度图像 3、关键点 4、滤波 一、可视化的补充 可视化深度图像的两种方法,在3D视窗中以点云形式进行可视化(深度图像来源于点云),另一种是将深度值映射为颜色,从而以彩色图像方式可视化深度图像。 ...

longer88888的博客 2194

【pcl学习记录】QVtkWidget中添加左下角坐标轴

但是如图,只能显示一个大概的坐标轴,有时候我们还需要方向,各轴的标签等信息,所以这个就显得有点鸡肋。工作原因,需要使用单线激光雷达+AGILEX智能小车实现室内定位,涉及到激光点云数据可视化,个人选择了Qt+pcl+vtk的开发环境来实现对应功能,记录一下开发过程中遇到的困难和解决方式。虽然成功在QVtKWidget中显示出来,但是多出来一个窗口,是在drawcoordinate函数中创建的renderWindow,虽然没有用到,但代码删掉程序就异常终止,到这里算勉强实现左下角坐标轴。白白花了两天时间啊。

2301_76329543的博客 2171

PCLVisualizer

/ 1. 创建可视化器// 2. 创建“自定义颜色处理器”:所有点设为绿色(0,255,0)// 3. 添加点云时,指定颜色处理器// 4. 设置点大小(3个单位)效果:整个点云变成绿色(不管点云本身有没有颜色)。关键逻辑:强制给点云设置统一颜色;适合 “单色点云”(比如区分不同的点云集群)。// 1. 创建可视化器// 2. 注册回调函数:处理键盘、鼠标事件// 键盘事件回调// 按 'r' 时,删除所有文字++i) {

qq_74144382的博客 1283

PCL之坑(四)——可视化坐标系对应关系

addCoordinateSystem():函数在可视化窗口中添加一个红绿蓝三色的三维指示坐标轴,红色是X轴,绿色是Y轴,蓝色是Z,Z方向是指向屏幕的。PCL点云库中使用的是右手三维坐标系。

图像学习之旅 729
上一篇: PCL入门系列 —— 点云数据类型及相关属性
下一篇: PCL入门系列 —— 点云数据加载及保存
工业机器视觉
博客等级 码龄11年 1万+粉丝 42原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值