Blog icon indicating copy to clipboard operation
Blog copied to clipboard

理解YUV格式

Open jason--liu opened this issue 5 years ago • 0 comments

YUV、RGB都是一种颜色编码方式。

RGB颜色编码

在图像显示中,一张 1280 * 720 大小的图片,就代表着它有 1280 * 720 个像素点。其中每一个像素点的颜色显示都采用 RGB 编码方法,将 RGB 分别取不同的值,就会展示不同的颜色。每个原色占8位,也就是一个字节,一个像素占3个字节,那么一张1280*720图片所占的存储空间就是 1280 * 720 * 3 / 1024 / 1024=2.63M

YUV颜色编码

YUV是一种颜色空间,基于YUV的颜色编码是流媒体的常用编码方式。Y表示流明,U、V表示色度、浓度,这种表达方式起初是为了彩色电视与黑白电视之间的信号兼容。 对于图像每一点,Y确定其亮度,UV确认其彩度。 和RGB编码类似,每个像素点都保护Y、U、V分量。但Y分量和UV分量是可以分离的,如果没有Y分量也可以显示完整图像,只不过是黑白的。 对于YUV图像,并不是每个像素点都完整保护YUV分量,不同采样方式,保存的像素也不同。可以每个Y分量都对应有UV分量,也可以几个Y分量公用UV风量。下面详细谈谈。

YUV采样格式

YUV常用的采用格式主要是下面三种:

  • Y:U:V 4:4:4
  • Y:U:V 4:2:2
  • Y:U:V 4:2:0

YUV444采样

YUV444采样意味着YUV三个分量采样比例相同,这种采样方式和RGB类似,每个分量占8位,一个像素点占用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 
最后映射的像素点为:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]

可以看到这种采样方式和和RGB一样,并没有节省带宽。

YUV422采样

YUV422采样,意味着UV分量是Y分量的一半,即一个像素点出U分量,下一个像素点就出V分量,也可以理解为两个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]

一张1280 * 720的图像采用YUV422采样占用的存储空间为: 1280 * 720 * (1 + 0.5 + 0.5) / 1024 / 1024 = 1.76M

YUV420采样

YUV420采样,用得比较多,并不是指某个像素点没有U分量或者V分量。这种采样方式是隔行采样,也就是说第一行只采U分量,并且和Y分量在这一行的采样比例是2:1的,下一行只采V分量,如此反复 举例说明:

假如图像像素为:
[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 Y7]、[Y3 U2 V7]
[Y5 U0 V5]、[Y6 U0 V5]、[Y7 U2 V7]、[Y8 U2 V7]

一张1280 * 720的图像采用YUV420采样占用的存储空间为: (1280 * 720 * 8 + 1280 * 720 * 0.25 * 8 * 2)/ 8 / 1024 / 1024 = 1.32 MB 说完了采样接下来看看它们是如何存储的。 YUV的存储格式有两种:

  • plannar 平面格式
    • 指先连续存储所有像素点的 Y 分量,然后存储 U 分量,最后是 V 分量。
  • packed 打包模式
    • 指每个像素点的 Y、U、V 分量是连续交替存储的。 根据采样方式和存储格式的不同,就有了多种 YUV 格式。这些格式主要是基于 YUV 4:2:2 和 YUV 4:2:0 采样。 常见的基于YUV 4:2:2采样的格式如下表: | YUV 4:2:2 采样 -- | -- | -- YUYV格式 | UVUY格式 | YUV 422P格式 |

 

YUV 420P 类型 YUV 420SP 类型

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

  YUV 4:2:0 采样 YUV 4:2:0 采样
YUV 420P 类型 YV12 格式 YU12格式
YUV 420SP 类型 NV12格式 NV21格式

参考资料

一文读懂 YUV 的采样与格式

jason--liu avatar Aug 20 '19 03:08 jason--liu