天天看点

RGB、YUV颜色采样与编码格式

文章目录

    • 一、RGB 的采样与编码格式
    • 二、YUV 的采样与编码格式
      • 采样原理
        • YUV4:4:4
        • YUV4:2:2
        • YUV4:2:0
      • 图像大小计算
      • YUV存储格式
        • planar(平面)格式
        • packed(打包)格式
        • YUV420P下 YU12和YV12两种格式
        • YUV420SP下 NV12 和 NV21两种格式
    • RGB和YUV格式相互转换

一、RGB 的采样与编码格式

R、G、B分别代表red、green、blue,三原色。将他们按照不同比例叠加,可得到更多不同颜色。
           
RGB、YUV颜色采样与编码格式

每个像素点的颜色由R、G、B三原色表示。每一个颜色通道(原色)包含2^8= 256种不同的红/绿/蓝(八位二进制),占用8bit,也就是一字节,那么一个像素点也就占用了3字节。

图片大小计算:

一张 1280 * 720 大小的图片,就占用 1280 * 720 * 3 / 1024 / 1024 = 2.63 MB 存储空间。

二、YUV 的采样与编码格式

RGB、YUV颜色采样与编码格式

YUV(YCbCr )格式也包含三个分量:

Y——明亮度,也成灰阶,没有UV分量也可成像,图像是黑白的(基础信号)

UV——色度:色彩+色彩饱和度(正交调制信号)

每个 Y 分量可以都有自己对应的 UV 分量,也可以几个 Y 分量共用 UV 分量,这就是为何会有YUV4:4:4、YUV4:2:2、YUV4:2:0采样格式出现,用于减小图像包含的数据量大小,便于传输和存储。

采样原理

YUV4:4:4

YUV三个信道的信号全采样,每个像素的三个分量信息完整(每个分量一般用8bit),因此每个像素经量化后,未经压缩,占用3字节。
           

假设四个像素为:

[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

存放的码流为:

Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3

YUV4:2:2

亮度Y分量保持不变;对UV分量进行采样,数据量减小一半

假设四个像素为:

[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

采样码流为:

[Y0 U0 ] [Y1 V1] [Y2 U2 ] [Y3 V3]

存放的码流为:

[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3 ] [Y3 U2 V3]

隔行扫描,行1出U分量,那么下一行行2则出V分量(即UV分量按照1:1的比例进行采样),最终相邻两个Y分量共用一组UV分量。

YUV4:2:0

亮度Y分量保持不变;对UV分量进行采样,数据量只有1/4

假设八个像素为:

[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

[Y5 U5 V5] [Y6 U6 V6] [Y7 U7 V7] [Y8 U8 V8]

采样码流为:

[Y0 U0 ] [Y1 ] [Y2 U2 ] [Y3 ]

[Y5 V5] [Y6 ] [Y7 V7] [Y8 ]

存放的码流为:

[Y0 U0 V5] [Y1 U0 V5] [Y2 U2 V7] [Y3 U2 V7]

[Y5 U0 V5] [Y6 U0 V5] [Y7 U2 V7] [Y8 U2 V7]

隔行扫描,且UV分量按照2:1的比例进行采样,第一个像素保留一半U/(V)数据,相邻第二个像素U和V分量全舍弃,第三个像素采集第二次U/(V)数据,第四个像素U和V分量全舍弃,第五个像素采集第一次V/(U),最终相邻四个Y分量共用一组UV分量,而且是按照 2*2 的小方格的形式分布。

如图:

RGB、YUV颜色采样与编码格式

黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量。

YUV 4:4:4采样,每一个Y对应一组UV分量。

YUV 4:2:2采样,每两个Y共用一组UV分量。

YUV 4:2:0采样,每四个Y共用一组UV分量,如图中的红色部分。

图像大小计算

假设一幅图像,像素大小为1280*720

YUV 4:4:4采样,12807203/1024/1024 ≈2.64M

YUV 4:2:2采样,(128072081+12807200.52)/8/1024/1024 ≈1.76M

YUV 4:2:0采样,(128072081+12807200.252)/8/1024/1024 ≈1.32M

YUV存储格式

planar(平面)格式

对于planar格式,先连续存储所有像素点的Y分量,紧接着存储所有像素点的U分量,最后是所有像素点的V分量。
           

packed(打包)格式

对于packed格式,每个像素点的 Y、U、V 分量是连续交叉存储的。
           

常见的基于 YUV 4:2:2 采样的格式如下表:

RGB、YUV颜色采样与编码格式

常见的基于 YUV 4:2:0 采样的格式如下表:

RGB、YUV颜色采样与编码格式

YUV420P下 YU12和YV12两种格式

YUV420P中的Y、U、V分量都是平面格式,如下图所示:

RGB、YUV颜色采样与编码格式

YUV420P又分为YU12 和 YV12 两种格式

YU12格式和YV12格式的不同处在U平面和V平面的位置不同。

YU12格式中,U平面紧跟在Y平面之后,然后才是V平面(即:YUV);

YV12则是相反(即:YVU)。

YU12: YYYYYYYY UU VV =>YUV420P

YV12: YYYYYYYY VV UU =>YUV420P

YUV420SP下 NV12 和 NV21两种格式

YUV420SP中的Y分量为平面格式,UV分量为打包格式,即 U 和 V 分量交错排列。如下图所示:

RGB、YUV颜色采样与编码格式

YUV420SP也分为两种格式 NV12 和 NV21,这两种格式的不同在于UV交错排列的顺序不同。

NV12: YYYYYYYY UVUV =>YUV420SP

NV21: YYYYYYYY VUVU =>YUV420SP

RGB和YUV格式相互转换

图像显示器——通过RGB模型显示图像

传输图像数据——通过YUV模型传输 (YUV 模型可以节省带宽)

因此:

RGB、YUV颜色采样与编码格式

转换公式为:

RGB、YUV颜色采样与编码格式

YUV图像基本处理(含代码)

继续阅读