当前位置: 首页 > article >正文

ros2--图像/image

原始图像

接口类型:

压缩图像

接口类型:

sensor_msgs/msg/CompressedImage

ros2 interface show sensor_msgs/msg/CompressedImage 
# This message contains a compressed image.std_msgs/Header header # Header timestamp should be acquisition time of imagebuiltin_interfaces/Time stampint32 secuint32 nanosecstring frame_id# Header frame_id should be optical frame of camera# origin of frame should be optical center of cameara# +x should point to the right in the image# +y should point down in the image# +z should point into to plane of the imagestring format                # Specifies the format of the data#   Acceptable values:#     jpeg, png, tiffuint8[] data                 # Compressed image buffer

1. header (std_msgs/Header)

消息的头部信息,包含时间戳和坐标系标识:

  • stamp (builtin_interfaces/Time)

    • sec (int32): 时间戳的秒部分

    • nanosec (uint32): 时间戳的纳秒部分

    • 作用:表示图像的采集时间(通常是相机捕获图像的时刻)。

  • frame_id (string)

    • 作用:定义图像的坐标系(通常是相机的光学坐标系)。

    • 坐标系约定

      • 原点:相机的光学中心(光心)。

      • +x:指向图像的右侧

      • +y:指向图像的下方

      • +z:指向图像平面内(即光轴方向)。


2. format (string)

指定图像的压缩格式,常见值包括:

  • "jpeg""png""tiff"(ROS 支持的压缩格式)。

  • 作用:告知解码器如何解析后续的 data 字段。


3. data (uint8[])

存储压缩后的图像数据的字节数组:

  • 编码方式:由 format 字段指定(如 JPEG、PNG 等)。

  • 特点

    • 二进制数据,直接存储压缩后的字节流。

    • 相比原始图像(sensor_msgs/Image),体积更小,适合带宽有限的场景。

关键区别:CompressedImage vs 原始 Image

  • 原始图像 (sensor_msgs/Image)

    • 包含未压缩的像素数据(如 rgb8bgr8mono8 等格式)。

    • 数据量大,占用带宽高。

  • 压缩图像 (CompressedImage)

    • 通过 format 指定压缩算法(如 JPEG/PNG),data 存储压缩后的二进制流。

    • 需解码后才能使用(如用 OpenCV 的 cv_bridge)。

图像压缩算法和像素格式

图像的本质

图像的数据本质上是 像素值的集合,存储了每个点的颜色或亮度信息。

  • 在内存中的表示

    • 图像是一个多维数组(如OpenCV中的ndarray)。

    • 例如:

      • 灰度图:shape=(H, W),每个像素是 0(黑)到 255(白)的整数(uint8)。

      • 彩色图:shape=(H, W, 3),每个像素是 [B, G, R] 三个通道的值(OpenCV默认顺序)。

  • 在文件中的表示

    • 未压缩格式(如BMP):直接存储像素值,文件较大。

    • 压缩格式(如JPEG/PNG):通过算法减少存储空间。

-- 所以先有像素,再有图像压缩算法。

图像压缩算法

作用

主要用于减少图像数据的体积,分为无损压缩有损压缩

分类

(1) 无损压缩

压缩后可以完全恢复原始数据,适合需要精确像素的场景(如医学影像、卫星图像)。

  • PNG (Portable Network Graphics)

    • 支持透明通道(Alpha通道),适合保存带遮罩的图像。

    • 压缩率较高,但比JPEG慢。

  • TIFF (Tagged Image File Format)

    • 支持多图层、多通道,常用于专业摄影和印刷。

  • BMP (位图)

    • 无压缩,文件体积大,ROS中较少使用。

(2) 有损压缩

牺牲部分图像质量以换取更高的压缩率,适合实时传输(如摄像头数据)。

  • JPEG (Joint Photographic Experts Group)

    • 最常用的有损压缩格式,适用于自然场景(照片)。

    • 不支持透明通道,压缩率高,但可能产生块状伪影(Blocking Artifacts)。

  • WebP

    • Google开发,比JPEG更高的压缩率,支持透明通道。

  • HEIF/HEIC

    • 苹果推广的高效图像格式,压缩率优于JPEG。

像素格式(Pixel Formats)

本质和作用

像素格式定义了图像数据存储方式解释规则。

注意:计算机中任何数据都是01二进制,所以图像数据也是01二进制数据。

像素格式由很多标准组成:

  1. 颜色通道(Channels)

决定图像的色彩信息如何存储,是像素格式最关键的组成部分。

  • 常见类型

通道数量格式示例说明
1mono8单通道灰度图(0=黑,255=白)
3bgr8/rgb8三通道彩色图(BGR是OpenCV默认顺序,RGB是通用标准)
4bgra8四通道(含Alpha透明通道,0=透明,255=不透明)
其他yuv422多通道非RGB格式(如YUV用于视频压缩)
  • 特殊通道排列

    • Bayer格式(如bayer_rggb):原始相机传感器的单通道排列,需解马赛克(Demosaicing)转换为RGB。


  1. 位深度(Bit Depth)

定义每个通道的数值范围和精度,影响图像的动态范围和存储大小。

位深度数据类型数值范围典型用途
8位uint80~255普通图像(JPEG/PNG)
16位uint160~65535医学影像、深度传感器
32位float32浮点数(如0.0~1.0)高动态范围(HDR)、深度图

示例

  • mono16:16位灰度图,可表示更精细的亮度层次。

  • 32FC1:32位浮点单通道,用于存储深度值(单位:米)。


  1. 数据布局(Memory Layout)

定义像素值在内存中的排列方式,影响数据读取效率。

  • 交错存储(Interleaved)

    • 通道值按像素顺序排列(如BGRBGRBGR...)。

    • 适用于大多数彩色图像(如OpenCV的bgr8)。

  • 平面存储(Planar)

    • 所有像素的同一通道连续存储(如RRRR...GGGG...BBBB...)。

    • 常见于视频编码(如YUV420)。

示例对比

  • bgr8(Interleaved):[B1,G1,R1, B2,G2,R2, ...]

  • yuv420(Planar):[Y1,Y2,...,Yn, U1,U2..., V1,V2...]


  1. 颜色空间(Color Space)

定义如何将数值映射到实际颜色,影响色彩还原效果。

颜色空间说明
RGB/BGR基于红、绿、蓝三原色的加色模型,最常用。
YUV/YCrCb分离亮度(Y)和色度(UV),用于视频压缩(如JPEG、H.264)。
HSV/HSL用色调(H)、饱和度(S)、亮度(V/L)表示,适合颜色分析。
Grayscale单通道亮度值,无色彩信息。

示例

  • 摄像头原始数据可能是YUV422,需转换为BGR才能在OpenCV中正确显示。

分类

(1) 常见彩色格式

格式名说明
rgb8红-绿-蓝,每个通道8位(24位色)
bgr8蓝-绿-红(OpenCV默认格式)
rgba8红-绿-蓝-透明(32位)
bgra8蓝-绿-红-透明(OpenCV带Alpha通道)
yuv422YUV颜色空间,用于部分摄像头
yuv420更紧凑的YUV格式(视频常用)

(2) 灰度(单通道)格式

格式名说明
mono88位灰度图(0=黑,255=白)
mono1616位灰度图(0~65535)

http://www.lryc.cn/news/2401871.html

相关文章:

  • Rust 学习笔记:关于智能指针的练习题
  • 6.RV1126-OPENCV 形态学基础膨胀及腐蚀
  • 筑牢企业网管域安全防线,守护数字核心——联软网管域安全建设解决方案
  • 【目标检测】backbone究竟有何关键作用?
  • 一个小小的 flask app, 几个小工具,拼凑一下
  • 对抗性提示:大型语言模型的安全性测试
  • 好得睐:以品质守味、以科技筑基,传递便捷与品质
  • docker-部署Nginx以及Tomcat
  • Servlet 体系结构
  • 蒙特卡罗模拟: 高级应用的思路和实例
  • Java集合中Stream流的使用
  • Python批量转换Word、Excel、PPT、TXT、HTML及图片格式到PDF,包含错误处理和日志记录功能
  • 数据分析Agent构建
  • vscode配置lua
  • 【笔记】MSYS2 的 MINGW64 环境 全面工具链
  • 国内头部的UWB企业介绍之品铂科技
  • Prj10--8088单板机C语言8259中断测试(2)
  • 《前端面试题:CSS对浏览器兼容性》
  • 使用 Docker Compose 安装 Redis 7.2.4
  • 35.x64汇编写法(二)
  • 安全大模型的思考
  • SQL Server 2025 预览版新功能
  • NineData云原生智能数据管理平台新功能发布|2025年5月版
  • 数学复习笔记 25
  • Linux可执行文件ELF文件结构
  • RAG:大模型微调的革命性增强——检索增强生成技术深度解析
  • DisplayPort 2.0协议介绍(1)
  • I2C通信讲解
  • 【信息系统项目管理师-选择真题】2025上半年(第一批)综合知识答案和详解
  • ABP VNext 在 Kubernetes 中的零停机蓝绿发布