PCL 由点云生成深度图像

2023-11-01

前言:在电脑上的pcl1.8.0版本可能是由于版本问题,无法在窗口显示深度图像,但是深度图像确实是生成了的,可以通过一个API将深度图像保存为一个png格式的图片然后查看。

该函数如下:

//save rangeImage
//相关的头文件
#include <pcl/visualization/common/float_image_utils.h>//保存深度图像
#include <pcl/io/png_io.h>//保存深度图像

    float *ranges = rangeImage.getRangesArray();
    unsigned char* rgb_image = pcl::visualization::FloatImageUtils::getVisualImage(ranges,rangeImage.width,rangeImage.height);
    pcl::io::saveRgbPNGFile("saveRangeImageRGB.png",rgb_image,rangeImage.width,rangeImage.height);//保存至该png文件
    std::cerr << "Picture Saved!" << std::endl;

完整代码:

#include <iostream>
#include <pcl/range_image/range_image.h>//深度图有关文件
#include <pcl/visualization/pcl_visualizer.h>//点云可视化头文件
#include <pcl/io/pcd_io.h>//pcd文件输入/输出
#include <pcl/visualization/range_image_visualizer.h>//rangeImage可视化头文件
#include <pcl/common/common_headers.h>
#include <pcl/console/parse.h>//命令行参数解析
#include <boost/thread/thread.hpp>//多线程文件
#include <pcl/visualization/common/float_image_utils.h>//保存深度图像
#include <pcl/io/png_io.h>//保存深度图像

int main (int argc, char** argv) {

    //读入点云数据
   // pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in(new pcl::PointCloud<pcl::PointXYZ>);
   // pcl::io::loadPCDFile("room_scan1.pcd",*cloud_in);

  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in(new pcl::PointCloud<pcl::PointXYZ>);
 //生成数据
  for (float y=-0.5f; y<=0.5f; y+=0.01f) {
    for (float z=-0.5f; z<=0.5f; z+=0.01f) {
      pcl::PointXYZ point;
      point.x = 2.0f - y;
      point.y = y;
      point.z = z;
      cloud_in->points.push_back(point);
    }
  }
  cloud_in->width = (uint32_t) cloud_in->points.size();
  cloud_in->height = 1;



//以1度为角分辨率,从上面创建的点云创建深度图像。
  float angularResolution = (float) (  1.0f * (M_PI/180.0f));  
// 1度转弧度
  float maxAngleWidth     = (float) (360.0f * (M_PI/180.0f));  
// 360.0度转弧度
  float maxAngleHeight    = (float) (180.0f * (M_PI/180.0f)); 
// 180.0度转弧度
  Eigen::Affine3f sensorPose = (Eigen::Affine3f)Eigen::Translation3f(0.0f, 0.0f, 0.0f);
  pcl::RangeImage::CoordinateFrame coordinate_frame = pcl::RangeImage::CAMERA_FRAME;
  float noiseLevel=0.00;
  float minRange = 0.0f;
  int borderSize = 1;
  pcl::RangeImage rangeImage;
  rangeImage.createFromPointCloud(*cloud_in, angularResolution, maxAngleWidth, maxAngleHeight, sensorPose, coordinate_frame, noiseLevel, minRange, borderSize);
std::cout << rangeImage << "\n";//重载运算符<<

pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("CloudPointView"));
viewer->initCameraParameters();

int v1(0);
//viewer->createViewPort(0,0,0.5,1,v1);
viewer->setBackgroundColor(255,255,255,v1);
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> color1(cloud_in->makeShared(),255,0,0);
viewer->addPointCloud(cloud_in->makeShared(),color1,"pointCloud",v1);

viewer->addCoordinateSystem();
//viewer->spin();//这句话不注释掉会导致只显示点云图而不显示深度图的窗口



//save depth picture
    float *ranges = rangeImage.getRangesArray();
    unsigned char* rgb_image = pcl::visualization::FloatImageUtils::getVisualImage(ranges,rangeImage.width,rangeImage.height);
    pcl::io::saveRgbPNGFile("saveRangeImageRGB.png",rgb_image,rangeImage.width,rangeImage.height);
    std::cerr << "Picture Saved!" << std::endl;

//可视化深度图像rangeImage
pcl::visualization::RangeImageVisualizer range_image_widget("Range image");//创建Range image显示的对象
range_image_widget.setWindowTitle("RangeImage");
range_image_widget.showRangeImage(rangeImage);
    while (!range_image_widget.wasStopped ()&& !viewer->wasStopped())
    {
        range_image_widget.spinOnce ();
        viewer->spinOnce();

        pcl_sleep (0.01);


    }

    return  0 ;
}

可视化:左下为深度图

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PCL 由点云生成深度图像 的相关文章

  • QML树控件TreeView的使用(上)

    在Qt5 5之前是没有树控件的 我们在使用时用的是ListView来构造出一个树 Qt5 5之后的QML开发阶段 有了树控件TreeView 本篇着重记录QML的TreeView的使用 根据MVC分解文件 类 如下 TreeControll
  • Q数的定义

    1 Q数的定义 对于16位的DSP而言 Q数定义共有16种 其简化写法分别是Q15 Q14 Q13到Q0 其数学含义可以 在其标准定义中确定 分别是Q1 15 Q2 14 Q3 13到Q16 0即标准形式为 Qn m 其数学意义是Q数的最大
  • 【抓包分析tcp协议】

    一 七层网络模型与常见协议 二 协议分析工具 1 网络监听 TcpDump WireShark 适用偏底层的协议分析 2 代理Proxy 适用偏高层的协议分析 如http 推荐工具 手工测试charles 全平台 安全测试burpsuite
  • Proxy error: Could not proxy request 解决方法

    问题本质是代理失败 常见原因 1 后端相应的被代理服务器没有开启 2 代理规则写错 前后端部署的域名应一致 3 没有把vue config js中的 before require mock mock server js 注释掉 导致走代理前
  • linux-select函数详解

    写在前面 主要是参考下边的两篇文章 对文章的内容做了一些记录 使用背景 select是实现IO多路复用的一种方式 典型场景是网络多并发服务器 服务器需要和多个客户端保持连接 相关源码可参考参考中的第二篇文章 IO多路复用概念参考第三篇文章
  • ISOWEEK的算法

    算ISOWEEK的时候 通常是以 该日的所属周数 1 该年的1 4所属周数 但也有特殊的情况 case1 可能当年的一月1号到3号是属于前年的 case2 可能前年12月29到31号是属于下一年的 SQL的算法 CREATE FUNCTIO
  • 开源自动扫描工具OpenSCAP介绍

    OpenSCAP 是一个获得 SCAP 认证的免费开源的自动化扫描 基线核查 报告和自动修复工具 目前主要由 Redhat 进行维护 OpenSCAP 由工具和基线库两个部分组成 两者没有紧密的耦合关系 比如使用 http vuls io
  • 服务器ie安全增强关闭还是显示,如何关掉ie浏览器的增强安全配置

    在 Windows Sever 2012 中打开 IE 浏览器时 IE10 会出现 已启用 Internet Explorer 增强的安全配置 的提示信息 在安全性等级中会设置以 高安全性 如果我想要关闭 Internet Explorer
  • Anaconda系统配置、换源、环境隔离、pycharm环境配置一站式教程

    Anaconda配置一站式教程 欢迎访问我的博客sakura 绘梨衣 1 安装conda 这个下载 除了安装路径 无脑确定就行了 下载网址 Free Download Anaconda 选择安装系统直接下载 最好是不要安装在C盘 反对C盘战
  • Python对excel写入数据操作实例代码(只供参考)

    coding utf8 把buffer中的信息 写入到excel中 并按照要求 构造表格样式 导入readCSV模块 用来获取buffer数据 from readCSV import readCSV from readConfig impo
  • httpclient 工具类

    1 类 package com cainiao manage utils import org apache http HttpEntity import org apache http NameValuePair import org a
  • 类加载 器&反射

    一 类加载器 1 1类加载 1 2类加载器 理解 1 2 1类加载器的作用 1 2 2JVM的类加载机制 1 2 3Java中的内置类加载器 1 2 4ClassLoader 中的两个方法 二 反射 2 1反射的概述 理解 2 2获取Cla
  • 初学maven详细总结

    文章转载自 https www cnblogs com tzyy p 4768859 html 初学maven 简单总结一下学习心得 若有不对的地方 欢迎各位大神给我指正 总结分为6个部分 maven概述 maven安装 maven项目结构
  • Unity 动态修改宏定义

    宏定义可以方便的区分出不同情况下使用的代码 比较经典的就是 UNITY EDITOR 这类 if UNITY EDITOR Debug Log 当前是编辑器环境 else Debug Log 当前不是编辑器环境 endif 开发者同样可以自
  • 微调预训练模型huggingface,transformers

    首先加载Yelp Reviews数据集 from datasets import load dataset dataset load dataset yelp review full dataset train 100 如您现在所知 您需要

随机推荐

  • 怎么让Chrome浏览器支持小于12px的文字?

    Chrome浏览器默认字体大小是16px 每个浏览器默认字体大小可能不一样 0 8 10 8 px div font size 10px span display inline block webkit transform scale 0
  • Numpy数组的序列化和反序列化

    在处理图像数据时 有这么一种需求 图像通常是一个矩阵数据 需要将矩阵数据通过base64编码传输 传输完毕之后解码还原得到原来的矩阵数据 import numpy as np import base64 matrix data 1 2 3
  • python程序设计心得体会感想-python实训心得体会

    技术文档 主体内容 可以认为是页面最想表达的内容总和 对于内容详情页来说 主体内容指从标题开始至正文内容结束 翻页区域也被视为主体内容 文章后的评论 分享 推荐等不视为主体内容 首屏 用户点击搜索结果后进入移动页面 不滑动屏幕即看到的所有内
  • HashMap为什么要使用红黑树

    在JDK1 8之后 Java对HashMap做了改进 在链表长度大于8的时候 将后面的数据存到红黑树中 以加快检索速度 红黑树也是一种平衡二叉树 每个节点有一个储存位表示节点的颜色 可以是红色或者黑色 通过对任意一条从根到叶子的路径上各个节
  • C++编程习惯与编程要点

    假设现在我们要实现一个复数类complex 在类的实现过程中探索良好的编程习惯 Header 头文件 中的防卫式声明 complex h ifndef COMPLEX define COMPLEX class complex endif 防
  • 专利与论文-2:什么是专利?专利的几种类型?

    目录 1 什么是知识产权 2 什么是专利 3 专利的主要类型 1 什么是知识产权 知识产权 是关于人类在社会实践中创造的智力劳动成果的专有权利 各种智力创造比如发明 外观设计 文学和艺术作品 以及在商业中使用的标志 名称 图像 都可被认为是
  • 现在的00后,真是卷死了呀,辞职信已经写好了·····

    谁说00后躺平了 但是有一说一 该卷的还是卷 这不 上个月我们公司来了个00后 工作没两年 跳槽到我们公司起薪22K 都快接近我了 后来才知道人家是个卷王 从早干到晚就差搬张床到工位睡觉了 最近和他聊了一次天 原来这位小老弟家里条件不太好
  • python计算机视觉编程第六章 图像聚类

    图像聚类 图像聚类 什么是聚类 举个简单的例子 给出了左图中的点的数据 对其划分为三类 这个过程就叫做聚类 聚类实际上就是根据数据的特征进行分类 把相似的东西分在一起 难点 聚类是无监督的 如何在无监督的情况下尽可能分出更好的类别来是一个比
  • [管理与领导-63]:IT基层管理者 - 潜技能 - 1 - 职场中的陷阱 - 看清楚职场中的霸凌现象

    目录 前言 1 打击自尊心 2 孤立他人 3 恶意针对 4 当众羞辱 5 持续性否定 前言 职场中 什么样的人都有 害人之心不可有 防人之心不可无 前者教人从善 后者教善人如何保护自己受到 坏人 的伤害 有一种情形 每天上班都陷入抑郁 总是
  • 面向对象练习题-第十三天

    练习1 基础 建立一个学生类 其中成员变量为学号 姓名 及三门课的成绩 数组 另建立一个包含主方法的类 定义2个学生类的对象 1 Student package com hpe java import java util Arrays 建立
  • 【ElementUI】日期选择器时间选择范围限制

    ElementUI 日期选择器时间选择范围限制 根据接口灵活设置可选时间 只能选今天之前的时间 或者是只能选今天之后的时间 今天是否可以选 限制结束日期不能大于开始日期
  • 【计算机操作系统】第八章 网络操作系统

    1 计算机网络概述 ARPA 网 gt Internet 1 1 计算机网络的拓扑结构 1 2 计算机广域网络 计算机网络分为广域网和局域网两类 公用交换电话网 分组交换网 帧中继网 异步传输模式 ATM 1 3 计算机局域网络 基本局域网
  • 华为OD机试 C++ 字符串化繁为简

    描述 给你一串只包含英文字母 无论大写或小写 和小括号的字符 注意 小括号总是成对出现 并且不会互相嵌套 小括号里的英文字母表示它们之间是等价的 比如在 ab 里 a 和 b 是等价的 而在 bc 里 b 和 c 是等价的 因此 a b 和
  • 图像融合算法(像素级)

    图像融合技术可以提取自然光图像和红外图像的互补信息 获得对同一场景描述解释更为准确 全面和可靠的图像 像素级融合是常用于灰度图像与可见光图像的融合 基于源图像的彩色化就是源图像和目标图像的融合过程 使其同时兼有源图像的颜色和目标图像的形状
  • 计算机专业毕设论文题目大全(二)

    这一期为大家整理了计算机专业常见的论文题目 需要参考资料的同学可以直接点击后面链接下载 没有链接的可以添加微信biyezhan007来获取资源 序号 题目 下载链接 101 基于Android的跃动旋律音游app的设计与实现 102 基于A
  • 【开发工具-Guava】新集合类型

    1 概述 转载 新集合类型 Guava引入了很多JDK没有的 但我们发现明显有用的新集合类型 这些新类型是为了和JDK集合框架共存 而没有往JDK集合抽象中硬塞其他概念 作为一般规则 Guava集合非常精准地遵循了JDK接口契约 2 Mul
  • 【学习笔记】深入浅析BIO、NIO、AIO

    BIO NIO AIO Java的I O演进之路 I O模型 就是用什么样的通道或者说是通信模式和架构进行数据的传输和接收 很大程度上决定了程序通信的性能 Java共支持3种网络编程的I O模型 BIO NIO AIO 实际 通行需求下 要
  • electron-vue 使用remote 模块 进行多个子窗口的关闭

    remote 模板在13版本后禁用了 至于我为什么用它 是因为一个功能的原因 多个子窗口可以进行对应的操作事件后单独关闭当前的某一个子窗口 1 先进行下载 npm yarn install save electron remote 2 需要
  • Python 代码执行超时判断

    通过 signal 信号处理函数 import signal 自定义异常类 继承自BaseException 这样Exception就捕获不到 class TimeoutException BaseException pass 超时信号函数
  • PCL 由点云生成深度图像

    前言 在电脑上的pcl1 8 0版本可能是由于版本问题 无法在窗口显示深度图像 但是深度图像确实是生成了的 可以通过一个API将深度图像保存为一个png格式的图片然后查看 该函数如下 save rangeImage 相关的头文件 inclu