来源

我们都知道RGB格式表示色彩,但是之前的显示器只能解析灰白的图像,为了兼容老旧设备,自然不能用RGB格式表示图像,于是YUV出现了。它可以将RGB三个分量转换成YUV三个分量,对于可以显示彩色的设备,解析Y、U、V三个分量,显示出彩色;对于老旧黑白设备,仅解析Y分量,就可以显示出黑白的图像。

YUV和YCbCr、YPbPr几个概念是一样的,Y表示亮度(Luminance),也就是灰度,U是色度(Chrominance),V是浓度(Chroma),而人眼对亮度分量Y的敏感度是高于UV分量的,所以YUV相对于RGB还可以减少数据量

RGB转YUV

Y = 0.299R + 0.587G + 0.114*B

U = -0.147R - 0.289G + 0.436B = 0.492(B-Y)

V = 0.615R - 0.515G - 0.100B = 0.877(R-Y)

YUV转RGB

R = Y + 1.140*V

G = Y - 0.394U - 0.581V

B = Y + 2.032*U

格式

分类

  • YUV444

    Y + U + V = 8 + 8 + 8 = 24bits = 3字节

  • YUV422

    Y + 0.5U + 0.5V = 8 + 4 + 4 = 16bits = 2字节

  • YUV420

    Y + 0.25U + 0.25V = 8 + 2 + 2 = 12bits = 1.5 字节

存储

YUV的存储形式分为Packed(打包)格式和Planar(平面)格式

  • Packed: YUV-YUV-YUV-YUV(交替存储)
  • Planar:
    • Planar: YYYY-UUUU-VVVV(连续存储)
    • Semi-Planar: YYYY-UVUVUVUV(Y连续存储,UV交替存储)

YUV422常用格式

  • Packed格式:

    1.YUYV: Y0 U0 Y1 V0 Y2 U2 Y3 V2

    2.UYVY: U0 Y0 V0 Y1 U2 Y2 V2 Y3

  • Planar格式:

    3.YUV422P(I422): Y Y Y Y U U V V

YUV420常用格式

  • Planar格式(YUV420P):

    1.YU12(I420): Y Y Y Y Y Y Y Y U U V V

    2.YV12: Y Y Y Y Y Y Y Y V V U U

  • Semi-Planar格式(YUV420SP):

    1.NV12: Y Y Y Y Y Y Y Y U V U V ————iOS使用

    2.NV21: Y Y Y Y Y Y Y Y V U V U ————Android使用

YUV图像处理

以YU12格式(也即I420)为例,介绍一下常用的YUV图像处理方法,图像宽为width,高height,则占用存储空间大小为 width*height*3/2 bytes

YUV分量提取

存储0~width*height*1,即Y分量

存储width*height*1~width*height*5/4,即U分量

存储width*height*5/4~width*height*3/2,即V分量

转灰度图

将width*height*1~width*height*3/2置128

U\V一个字节取值范围为0~255,128代表无色