zoukankan      html  css  js  c++  java
  • RGB/YUV 转换

    ref: https://juejin.cn/post/6844903640377884679
    https://blog.shenyuanluo.com/ColorConverter.html

    YUV

    YUV:是一种颜色空间,基于 YUV 的颜色编码是流媒体的常用编码方式,这种表达方式起初是为了彩色电视与黑白电视之间的信号兼容;其中

    • Y:表示明亮度(Luminance 或 Luma),也称灰度图。
    • U、V:表示色度(Chrominance 或 Chroma),作用是描述影像的色彩及饱和度,用于指定像素的颜色。

    Y’CbCr:(也称为 YUV),是 YUV 的压缩版本,不同之处在于 Y’CbCr 用于 数字图像 领域,YUV 用于 模拟信号 领域;MPEGDVD、摄像机中常说的 YUV 其实是 Y'CbCr,二者转换为 RGBA 的转换矩阵是不同的。

    • Cr:(色度红)反应了 RGB 输入信号 红色 部分与 RGB 信号亮度值之间的差异(即,当前颜色对 红色 的偏移程度)。
    • Cb:(色度红)反应了 RGB 输入信号 蓝色 部分与 RGB 信号亮度值之间的差异(即,当前颜色对 蓝色 的偏移程度)。

    注意:如无特殊说明,本文讨论的 YUV 均指 Y'CbCr

    格式

    YUV存储格式:

    • planar:先存储 Y,然后 U,然后 V
    • packed:yuv 交叉存储。

    常见格式

    1. yuv444: packet 采样(yuv yuv yuv)和 planar 采样(yyyy uuuu vvvv

    2. yuv422:packet 采样

      • yuvy:YUYV YUYV
      • uyvy:UYVY UYVY
    3. yuv422p:planar采样:YYYY UU VV

    4. yuv420:packet采样: YUV Y YUV Y

    5. yuv420p:planar采样

      • I420:

        I420 内存布局

      • YV12:

        YV12 内存布局

    6. yuv420sp:Y 是planar采样,UV 是packet采样

      • NV12:

        NV12 内存布局

      • NV21:

        NV21 内存布局

    转换

    转换矩阵

    注意:这里的转换矩阵中,当转换为 RGB 读取 YUV 时,需要将 U(Cb)**、V(Cr)** 的取值范围整数表示时,转换为:[-128, 127];浮点数表示时,转换为:[-0.5, 0.5]

    (这是因为:U(Cb)**、V(Cr)** 取值范围是 [﹣128, 127],对应的浮点数表示为 [﹣0.5, 0.5];而在存储时,为了方便存储,跟 Y 数据一样,统一用一个(无符号)字节表示,即取值范围是 [0, 255],对应的浮点数表示为:[0, 1]。)

    特别注意:OpenGL 内置的矩阵(如 mat2mat3mat4 )是 列主序,即需要将下列转换矩阵转换成 转置矩阵

    YUV ——> RGB

    1. 常规转换标准:

      常规 YUV ——> RGB 转换矩阵

    2. BT.601 标准:(SD TV)

      BT.601 YUV ——> RGB 转换矩阵

    3. BT.709 标准:(HD TV)

      BT.709 YUV ——> RGB 转换矩阵

    RGB ——> YUV

    1. 常规转换标准:

      常规 RGB ——> YUV 转换矩阵

    2. BT.601 标准:(SD TV)

      BT.601 RGB ——> YUV 转换矩阵

    3. BT.709 标准:(HD TV)

      BT.709 RGB ——> YUV 转换矩阵

  • 相关阅读:
    java HTTP代码示例
    eclipse创建文件package,source folder和folder区别及相互转换
    spring 及 spring boot 资源文件配置
    深入理解Java枚举类型(enum)
    Linux环境变量配置的三个方法--/etc/profile,~/.bashrc,shell
    JAXB和XStream比较
    java将配置信息写在数据库(利用反射)
    【大数据实战】Logstash采集->Kafka->ElasticSearch检索
    Linux 安装rabbitmq 遇到的一些问题
    Linux 下的jdk安装
  • 原文地址:https://www.cnblogs.com/wioponsen/p/14547427.html
Copyright © 2011-2022 走看看