1. 概述
YUV是一种像素格式,常见于视频编码与静态图像。与RGB格式相反,YUV分别由一个称为Y(相当于灰度)的“亮度”分量(Luminance or Luma)和两个称为 U(蓝色投影 Cb)和 V(红色投影 Cr)的“色度”分量(Chrominance or Chroma)表示,并由此得名。U(Cb)表示色度分量,是照片蓝色部分去掉亮度(Y)。V(Cr)表示色度分量,是照片红色部分去掉亮度(Y)。仅有 Y 分量而没有 UV 分量信息,一样可以显示完整的黑白(灰度)图像,解决了模拟信号电视黑白与彩色的兼容问题。YUV与YCbCr格式类似,但是有一些不同。
2. 采样方式
色度通道(UV)的采样率可以低于亮度通道(Y), 而不会显着降低感知质量。一种称为 “A:B:C” 的表示法用于描述相对于 Y 采样, U 和 V 的频率:
• 4:4:4 表示不降低色度(UV)通道的采样率。每个 Y 分量对应一组 UV 分量。
• 4:2:2 表示 2:1 水平下采样,没有垂直下采样。每两个 Y 分量共享一组 UV 分量。
• 4:2:0 表示 2:1 水平下采样,同时 2:1 垂直下采样。每四个 Y 分量共享一组 UV 分量。
如下图所示,黑色表示Y分量,空心表示UV分量:
![](https://i-blog.csdnimg.cn/blog_migrate/cc12c2a75d157acf56e9d90f7f506dcd.png)
3. 存储格式
YUV 在存储上通常分为平面格式(Planar),半平面格式(Semi-Planar)以及打包格式(Packed)
平面格式
平面格式有时也称为三面格式(Triplanar),即 Y, U, V 三个分量各自使用单独的数组保存,这种三平面分离的格式比较方便视频编码。
半平面格式
Y分量使用一个单独的平面,UV分量使用一个平面。
打包格式
在打包格式中,通常只有一个平面,所有亮度和色度数据交错。这类似于 RGB 像素格式,只是使用不同的颜色空间。打包格式在网络摄像头中非常流行。在硬件中,使用单独的平面效率低下,每个像素需要多次内存访问。打包格式更容易,因此使用起来更方便。另一方面,打包格式通常无法处理垂直子采样。否则,扫描线将具有不同的大小。因此,通常打包格式是水平子采样的,尤其是 2 倍(即 YUV 4:2:2)。
4. 分类
YUV图片按照采样方式不同分为YUV444、YUV422和YUV420,因为YUV420体积更小,因此实际中YUV420最常用。RBG格式图片转换为YUV420格式时,通常先转换为YUV444,然后再转换为YUV420;反之亦然。
YUV420p
YU12(I420/IYUV)
YU12 即 I420,也叫 IYUV,属于 YUV420P 格式。三个平面,分别存储Y、U、V分量。每四个 Y 分量共享一组 UV 分量。U、V 平面的 strides, width 和 height 都是 Y 平面的一半,因此一个像素 12 bits,内存排列如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/9456bcdde60cb6d976f3ad95fa73eab9.png)
YV12
YV12 与 YU12 几乎一样,仅改变了 U, V 平面的顺序。内存排列如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/58e0c2ee3ebc40a2491b65d2cca249cd.png)
YUV420sp
NV12
NV12 属于 YUV420SP 格式。两个平面,分别存储 Y 分量 和 UV 分量。其中 UV 分量共用一个平面并且以 U, V, U, V 的顺序交错排列。每四个 Y 分量共享一组 UV 分量。UV 平面的 strides, width 与 Y 平面一样长,但 height 仅为 Y 平面的一半。因此一个像素 12 bits,内存排列如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/59f7309f2b2ef83eaa8911c4e7389251.png)
NV21
NV21与 NV12 几乎一样,仅改变了 U, V 平面的顺序,按照VUVU的方式交替排列。内存排列如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/8d2c5e63714ef21776fef943e14a7eeb.png)
5. YUV420的内存计算
Y = width x height;
U = width/2 x height/2;
V = width/2 x height/2;
YUV = width x height x 1.5;
相同分辨率下RGB格式内存,RGB格式每个像素用R、G、B三个元素表示:
RGB = width x height x 3;
因此,相对于RGB格式,YUV格式可以节省一半的存储。
6. 关于命名
YUV420p:420表示按照4:2:0的方式采样,p表示Planar,即平面格式。
YUV420sp:420表示按照4:2:0的方式采样,sp表示Semi-Planar,即半平面格式,Y用一个平面,UV用一个平面。
YU12:“YU”指的是平面顺序:先是Y,然后是U,再是V。“12”指的是像素深度,即每像素12位。YV12类似。