YUV格式

YUV:"Y"表示明亮度(Luminance或Luma),也就是灰阶值,"U"和"V"表示的则是色度(Chrominance或Chroma)

为什么压缩数据一般采用YUV格式

  • 与熟知RGB类似,YUV也是一种颜色编码方法,它是指将亮度参量(Y:Luminance或Luma)和色度参量(UV:Chrominance或Chroma)分开进行表示的像素编码格式
  • 这样分开的好处就是不但可以避免相互干扰,没有UV信息一样可以显示完整的图像因而解决了彩色电视与黑白电视的兼容问题;还可以降低色度的采样率而不会对图像质量影响太大,降低了视屏信号传输时对频宽(带宽)的要求。
  • Y共用一组UV分量
image-20240813092203880

YUV具体格式

YUV444

表示$4:4:4$的YUV取样。

每个像素都有独立的Y、U、V分量。

每一个像素Y占一个字节,U占一个字节,V占一个字节,因此每个像素占:

$$1 (Y)×8 bits+1 (U)×8 bits+1 (V)×8 bits=24 bits/pixel (bpp)$$

以$2\times 2$像素的图像为例

image-20240815093959105
1
2
3
4
像素1:Y1, U1, V1
像素2:Y2, U2, V2
像素3:Y3, U3, V3
像素4:Y4, U4, V4

YUV422

表示$4:2:2$的YUV取样。

每相邻两个像素每个像素占一个Y,共享一个U和一个V,因此两个像素占:

$$2 (Y)×8 bits+1 (U)×8 bits+1 (V)×8 bits=32 bits$$

每个像素占:

$$\displaystyle\frac{32bits}{2 pixels}=16 bits/pixel (bpp)$$

以$2\times 2$像素的图像为例

image-20240815094054348
1
2
3
4
像素1:Y1, U1, V1
像素2:Y2, U1, V1
像素3:Y3, U2, V2
像素4:Y4, U2, V2

YUV422 格式比 YUV444 格式节省了数据量,同时仍然保持较高的图像质量。这就是为什么 YUV422 格式广泛用于视频压缩和传输的原因。

YUV411

表示$4:1:1$的YUV取样。

每相邻四个像素每个像素占一个Y,共享一个U和一个V,因此四个像素占:

$$4 (Y)×8 bits+1 (U)×8 bits+1 (V)×8 bits=48 bits$$

每个像素占:

$$\displaystyle\frac{48bits}{4 pixels}=12 bits/pixel (bpp)$$

以$2\times 2$像素的图像为例

1
2
3
4
像素1:Y1, U1, V1
像素2:Y2, U1, V1
像素3:Y3, U1, V1
像素4:Y4, U1, V1

YUV420

表示$4:2:0$的YUV取样。

水平每两个像素与垂直每两个像素中Y取4个,U取1个,V取1个,因此两个像素占:

$$4 (Y)×8 bits+1 (U)×8 bits+1 (V)×8 bits=48 bits$$

每个像素占:

$$\displaystyle\frac{48bits}{4 pixels}=12 bits/pixel (bpp)$$

以$2\times 2$像素的图像为例

image-20240815094148920
1
2
3
4
像素1:Y1, U1, V1
像素2:Y2, U1, V1
像素3:Y3, U1, V1
像素4:Y4, U1, V1

这里的$4:2:0$代表了$4:2:0$和$4:0:2$两种情况,它们在奇偶行交错出现。

常见的H.264、H.265、VP8、AV1等都是以它为基础进行编解码的。

存储方式

YUV420P

先存Y,再存U,再存V

image-20240815093500524

NV12

先存Y,再交错存储U、V

image-20240815093602289

其他

image-20240815094357980

RGB格式

RGB:红R、绿G、蓝B三基色。

RGB的排列。通常的图像像素是按RGB顺序进行排列,但有些图像处理要转成其他顺序,比如OpenCV经常转成BGR的排列方式。

image-20240813091753383

【一些格式】

1
2
AV_PIX_FMT_RGB24,  // RGB 8:8:8 24bpp
AV_PIX_FMT_ARGB, // ARGB 8:8:8:8 32bpp