ROS中的图像数据

无论是USB摄像头还是RGBD摄像头,发布的图像数据格式多种多样,在处理这些数据之前,我们首先需要了解这些数据的格式。

二维图像数据

连接USB摄像头到PC端的USB接口,通过以下命令启动摄像头:

roslaunch usb_cam usb_cam-test.launch

启动成功后,使用以下命令查看当前系统中的图像话题信息

rostopic info /usb_cam/image_raw

在这里插入图片描述
可以使用以下命令查看该图像消息的详细定义

rosmsg show sensor_msgs/Image

运行结果
在这里插入图片描述

该类型图像数据的具体内容如下。

1)header:消息头,包含图像的序号、时间戳和绑定坐标系。

2)height:图像的纵向分辨率,即图像包含多少行的像素点,这里使用的摄像头为720。

3)width:图像的横向分辨率,即图像包含多少列的像素点,这里使用的摄像头为1280。

4)encoding:图像的编码格式,包含RGB、YUV等常用格式,不涉及图像压缩编码。

5)is_bigendian:图像数据的大小端存储模式。

6)step:一行图像数据的字节数量,作为数据的步长参数,这里使用的摄像头为 width×3=1280×3=3840字节。

7)data:存储图像数据的数组,大小为step×height字节,根据该公式可以算出这里使用的摄像头产生一帧图像的数据大小是:3840×720=2764800字节,即2.7648MB。

一帧720×1280分辨率的图像数据量就是2.76MB,如果按照30帧/秒的帧率计算,那么一秒钟摄像头产生的数据量就高达82.944MB!这个数据量在实际应用中是接受不了的,尤其是在远程传输图像的场景中,图像占用的带宽过大,会对无线网络造成很大压力。实际应用中,图像
在传输前往往会进行压缩处理,ROS也设计了压缩图像的消息类型——sensor_msgs/CompressedImage,该消息类型的定义如下图所示:

在这里插入图片描述

这个消息类型相比原始图像的定义要简洁不少,除了消息头外,只包含图像的压缩编码格式“format”和存储图像数据的“data”数组。图像压缩编码格式包含JPEG、PNG、BMP等,每种编码格式对数据的结构已经进行了详细定义,所以在消息类型的定义中省去了很多不必要的信息。

三维点云数据

在 Kinect数据显示中,rviz订阅camera/depth_registered/points话题后,主界面即可显示三维点云数据。

那么这种三维点云数据的消息类型是什么呢?可以使用如下命令查看

rostopic info /camera/depth_registered/points

在这里插入图片描述
该消息类型对应于rviz中Add可视化插件时所选择的插件类型,使用以下命令查看该消息类型的具体结构

rosmsg show sensor_msgs/PointCloud2

在这里插入图片描述

三维点云的消息定义如下:

1)height:点云图像的纵向分辨率,即图像包含多少行像素点。

2)width:点云图像的横向分辨率,即图像包含多少列像素点。

3)fields:每个点的数据类型。

4)is_bigendian:数据的大小端存储模式。

5)point_step:单点的数据字节步长。

6)row_step:一列数据的字节步长。

7)data:点云数据的存储数组,总字节大小为row_step×height。

8)is_dense:是否有无效点。

点云数据中每个像素点的三维坐标都是浮点数,而且包含图像数据,所以单帧数据量也很大。如果使用分布式网络传输,在带宽有限的前提下,需要考虑能否满足数据的传输要求,或者针对数据进行压缩。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/103793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运行的 akrun 会打印信息到控制台,如何取消打印 -- chatGPT

gpt: 如果运行的程序 akrun 打印信息到控制台,但您希望取消或禁止它的输出,可以尝试以下方法: 1. **重定向输出到空文件**:您可以将程序的标准输出重定向到一个空文件,从而禁止信息输出到控制台。执行以下命令&#…

springboot 集成 zookeeper 问题记录

springboot 集成 zookeeper 问题记录 环境 springboot - 2.7.8 dubbo - 3.1.11 dubbo-dependencies-zookeeper-curator5 - 3.1.11 模拟真实环境,将 windows 上的 zookeeper 迁移到虚拟机 linux 的 docker 环境 failed to connect to zookeeper server 迁移到…

Spring Boot中的Redis自动配置与使用

Spring Boot中的Redis自动配置与使用 Redis是一种高性能的开源内存数据库,常用于缓存、会话管理和消息队列等场景。Spring Boot提供了自动配置来简化在Spring应用程序中使用Redis的过程。本文将介绍Spring Boot中的Redis自动配置是什么以及如何使用它来轻松集成Red…

分权分域有啥内容?

目前的系统有什么问题? 现在我们的系统越来越庞大,可是每一个人进来的查看到的内容完全一样,没有办法灵活的根据不同用户展示不同的数据 例如我们有一个系统,期望不同权限的用户可以看到不同类型的页面,同一个页面不…

动态盘转换为基本盘

问题描述 不小心将磁盘0(C和D是基本盘,蓝颜色)改成了动态盘(C和D是动态盘,橘黄色)?如何修改回来呢? 解决方案: 使用DiskGenius将动态磁盘转换为基本磁盘 操作之前一定…

Linux友人帐之系统管理与虚拟机相关

一、虚拟机相关操作 1.1虚拟机克隆 虚拟机克隆是指将一个已经安装好的虚拟机复制出一个或多个完全相同的副本,包括虚拟机的配置、操作系统、应用程序等,从而节省安装和配置的时间和资源。 虚拟机克隆的主要用途有: 创建多个相同或相似的虚拟…

并发编程——1.java内存图及相关内容

这篇文章,我们来讲一下java的内存图及并发编程的预备内容。 首先,我们来看一下下面的这两段代码: 下面,我们给出上面这两段代码在运行时的内存结构图,如下图所示: 下面,我们来具体的讲解一下。…

CubeMX+BabyOS 使用方法

MCU:STM32G030F 编译器:MDK 托管工具:Sourcetree CubeMX创建工程 BabyOS克隆 添加子模块 git submodule add https://gitee.com/notrynohigh/BabyOS.git BabyOS 切换dev 分支 查看当前分支 git branch -a 切换本地分支到dev git che…

关于网络协议的若干问题(一)

1、当网络包到达一个网关的时候,可以通过路由表得到下一个网关的 IP 地址,直接通过 IP 地址找就可以了,为什么还要通过本地的 MAC 地址呢? 答:IP报文端到端的传输过程中,在没有NAT情况下,目的地…

【JVM系列】- 启航·JVM概论学习

启航JVM概论 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享学习心得,欢迎指正&#xff0c…

open麒麟系统安装sql的经验和步骤

麒麟、QT5.9.2、mysql-5.7.37,编译mysql驱动 一、MySQL安装 1. 下载mysql https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz 2. 安装 安装经验: 我使用的qt版本是5.14.?? 忘…

ATF(TF-A)/OPTEE之动态代码分析汇总

安全之安全(security)博客目录导读 1、ASAN(AddressSanitizer)地址消毒动态代码分析 2、ATF(TF-A)之UBSAN动态代码分析 3、OPTEE之KASAN地址消毒动态代码分析

Python中使用IDLE调试程序

在IDLE中,使用菜单栏中的“Debug”对IDLE打开的python程序进行调试。 1 打开调试开关 选择IDLE菜单栏的“Debug->Debugger”,如图1①所示;此时在IDLE中会显示“[DEBUG ON]”,即“调试模式已打开”,如图1②所示&am…

JAVA加密算法

一、AES 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下: 加密:明文P通过AES加密函数和密匙K进行加密,得…

Go HTTP 调用(上)

哈喽大家好,我是陈明勇,今天分享的内容是 Go HTTP 调用。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出&am…

数据结构八大排序Java源码

文章目录 [1]. 堆排序[2]. 冒泡排序[3]. 选择排序[4]. (直接)插入排序[5]. 希尔排序(属于插入算法)[6]. 快速排序[7]. 归并排序[8]. 基数排序 王道数据结构排序讲解 排序算法最佳时间复杂度最坏时间复杂度平均时间复杂度空间复杂度…

【ftp篇】 vsftp(ftp) 每天生成一个动态密码

这里写目录标题 前言为什么需要动态每日生成一个密码?编写脚本定时任务java对应的代码 前言 社长最近接到一个需求,需要ftp每天动态生成一个密码 为什么需要动态每日生成一个密码? 在软硬件通讯过程中,就以共享单车为例&#xff0…

vsCode 忽略 文件上传

1 无 .gitignore 文件时,在项目文件右键,Git Bash 进入命令行 输入 touch .gitignore 生成gitignore文件 2 、在文件.gitignore里输入 node_modules/ dist/ 来自于:vscode git提交代码忽略node_modules_老妖zZ的博客-CSDN博客

深度学习_1_基本语法

数据结构 代码: import torchx torch.arange(12)##产生长度为12的一维张量print(x)##X x.resize(3, 4)##被弃用##print(X)y torch.reshape(x, (3, 4))##修改向量为矩阵,一维变二维print(y)print(y.size())xx torch.zeros((2, 3, 4))##三维矩阵&…

GEE:基于GLDAS数据集分析土壤湿度的时间序列变化

作者:CSDN @ _养乐多_ 本篇博客将介绍如何使用Google Earth Engine(GEE)进行土壤湿度数据的分析。我们将使用NASA GLDAS(Global Land Data Assimilation System)数据集,其中包括了关于土壤湿度的信息。通过该数据集,我们将了解土壤湿度在特定区域和时间段内的变化,并生…