美文网首页
图形图像基础知识(1)---- RGB/YUV 颜色格式

图形图像基础知识(1)---- RGB/YUV 颜色格式

作者: 特立独行的佩奇 | 来源:发表于2022-07-24 11:06 被阅读0次

常见RAW颜色格式

  • RGB 类型:
    ARGB1010102,ABGR1010102,BGRA1010102,RGBA1010102
    ARGB8888,ABGR8888,BGRA8888,RGBA8888
    XRGB8888,XBGR8888,BGRX8888,RGBX8888
    RGB888,BGR888
    RGB565,BGR565

  • YUV 类型:
    8-bit YUV 4:2:2 2-plane
    8-bit YUV 4:2:2 1-plane(VYUY,YVYU)
    8-bit YUV 4:2:0(2-plane)
    8-bit YUV 4:2:0(3-plane)

RGB类型

RGB颜色空间以R(Red:红)、G(Green:绿)、B(Blue:蓝)三种基本色为基础,进行不同程度的叠加,产生丰富而广泛的颜色,所以俗称三基色模式
不同的颜色格式表示的是各个分量占用的BIT数,比如RGBA888 表示Red、Green、Blue、Alpha 通道各占8BIT,每个像素占32BIT(4字节)

YUV类型

YUV是一种颜色编码方法,是编译true-color颜色空间(color space)的种类,常使用在各个视频处理组件中; YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。其中的"Y"表示明亮度,也就是灰阶值,即黑到白的范围值,所以只有Y值的图像是黑白的,U表示色彩值,V表示色彩的饱和度,UV用于指定像素的颜色

YUV类型介绍

YUV格式按照存储方法可以分为下面两类:

  • 平面格式 (planar formats
    将Y、U、V的三个分量分别存放在不同的存储空间中,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V

  • 紧缩格式 (packed formats
    将Y、U、V值按照像素存储在相同的存储空间,和RGB的存放方式类似,每个像素点的Y,U,V是连续交替存储的
    按照采样方式的不同,分为下面几种类型
    YUV4:4:4 表示完全取样。
    YUV4:2:2 表示2:1的水平取样,垂直完全采样。
    YUV4:2:0 表示2:1的水平取样,垂直2:1采样。

YUV444类型

每个像素点都存储对应的YUV值,注意444不是代表每个分量的字节数;YUV每个分量都需要占用一个字节(8bit)
所以,在1080x1920的图像中,需要1080x1920x(1Y + 1U + 1V)(字节)≈ 0.7MB来存储。
YUV 444 格式在屏幕上分布如下图所示:


YUV444.png
YUV422类型

每两个相邻像素点共用一对UV值,所以在1080x1920的图像中,需要1080x1920x(1Y+ 0.5U + 0.5V)(字节)≈ 0.5MB来存储。
YUV422格式在屏幕上分布如下图所示:


YUV422.png

YUV422 存储格式:

  • YUYV packed

    YUYV.png
  • YVYU packed

    YVYU.png
  • YU16、I422

    YU16.png
  • YV16

    YV16.png
YUV420类型

每四个相邻像素点共用一对UV值,相当于每个Y只占用0.25U和0.25V,在1080x1920的图像中,需要1080x1920x(1Y+ 0.25U + 0.25V)(字节)≈ 0.3MB来存储。
YUV422格式在屏幕上分布如下图所示:


YUV422.png

YU12(I420)、YV12

YU12-YV12.png

NV12 NV21

NV12-NV21.png

各个类型之间的转换

Android 的soure code 中提供了 libyuv 库来实现各个颜色类型之间的转换,代码是在 external下的 libyuv 目录下:
external/libyuv/files/include/libyuv/convert.h
external/libyuv/files/source/convert.cc

LIBYUV_API
int NV12ToI420(const uint8* src_y,
               int src_stride_y,
               const uint8* src_uv,
               int src_stride_uv,
               uint8* dst_y,
               int dst_stride_y,
               uint8* dst_u,
               int dst_stride_u,
               uint8* dst_v,
               int dst_stride_v,
               int width,
               int height);

// Convert NV21 to I420.
LIBYUV_API
int NV21ToI420(const uint8* src_y,
               int src_stride_y,
               const uint8* src_vu,
               int src_stride_vu,
               uint8* dst_y,
               int dst_stride_y,
               uint8* dst_u,
               int dst_stride_u,
               uint8* dst_v,
               int dst_stride_v,
               int width,
               int height);
......

相关文章

  • 图形图像基础知识(1)---- RGB/YUV 颜色格式

    常见RAW颜色格式 RGB 类型:ARGB1010102,ABGR1010102,BGRA1010102,RGBA...

  • RGB和YUV简单学习记录

    RGB和YUV是一种颜色编码格式。这里简单介绍一下RGB、YUV和HSV。 出处:一文读懂 YUV 的采样与格式h...

  • 五:RGB & YUV 颜色编码

    RGB 和 YUV 都是色彩空间模型。 RGB 颜色编码 RGB颜色编码格式,是指每种颜色都可以用(红,绿,蓝)三...

  • 理解 RGB & YUV 颜色编码

    RGB 和 YUV 都是色彩空间模型,下面来分别介绍下 RGB 颜色编码 RGB颜色编码格式,是指每种颜色都可以用...

  • RGB & YUV 颜色编码

    RGB 和 YUV 都是色彩空间模型,下面来分别介绍下 RGB 颜色编码 RGB颜色编码格式,是指每种颜色都可以用...

  • RGB&YUV 颜色编码理解

    前言:RGB 和 YUV 都是色彩空间模型,下面来分别介绍下 一、RGB颜色编码 颜色编码格式,是指每种颜色都可以...

  • iOS视频(基础篇)-YUV

    YUV简介 YUV是一种颜色编码方式,跟我们熟悉的RGB同样用户与编码颜色的一种数据格式。彩色图像常见的格式有RG...

  • IOS 视频格式之YUV

    YUV简介 yuv格式是一种图片储存格式,跟RGB格式类似。yuv中,y表示亮度(Luminance或Luma),...

  • 颜色空间

    颜色空间 = 色彩空间 颜色空间包含的种类 : RGB,YUV,HSV,HSL... 1,RGB 空间 主要用于老...

  • FFmpeg解码帧数据上传至OpenGL ES及GPU实现YUV

    本文档描述了经FFmpeg解码得到的多个YUV格式或RGB格式数据上传至OpenGL ES及YUV转换RGB的办法...

网友评论

      本文标题:图形图像基础知识(1)---- RGB/YUV 颜色格式

      本文链接:https://www.haomeiwen.com/subject/vnkbirtx.html