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 image
        builtin_interfaces/Time stamp
                int32 sec
                uint32 nanosec
        string 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 image

string format                # Specifies the format of the data
                             #   Acceptable values:
                             #     jpeg, png, tiff

uint8[] 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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值