音视频基础知识---像素格式YUV(转)

本文转载自:adolph_lu 的音视频基础知识---像素格式YUV

一、YUV概述

YUV,是一种颜色编码方法。常使用在各个影像处理组件中。 YUV 在对照片或影片编码时,考虑到人类的感知能力,允许降低色度的带宽。YUV,分为三个分量:

  • Y 表示明亮度(Luminance或Luma),也就是灰度值;
  • U(Cb) 表示色度(Chrominance)
  • V(Cr) 表示浓度(Chroma)

通常 UV 一起描述影像色彩和饱和度,用于指定像素的颜色。因此如果只有 Y 分量,没有 UV 分量,那么得到的就是黑白灰度图像。

对于 YUV 图像来说,并不是每个像素点都需要包含了 Y、U、V 三个分量,根据不同的采样格式,可以每个 Y 分量都对应自己的 UV 分量,也可以几个 Y 分量共用 UV 分量。


二、YUV采样格式

YUV444

YUV 4:4:4 采样,意味着 Y、U、V 三个分量的采样比例相同,因此在生成的图像里,每个像素的三个分量信息完整,都是 8 bit,也就是一个字节。通过 YUV444 采样的图像大小和 RGB 颜色模型的图像大小是一样的。

图像像素数据: Y0U0V0 Y1U1V1 Y2U2V2 Y3U3V3 
采样的码流: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3 
为什么叫4:4:4 , 意思是每4个像素里的数据有4个Y, 4个U, 4个V 
Y分量的大小: w*h 
U分量的大小: w*h 
V分量的大小: w*h

一张 1280 * 720 大小的图片,在 YUV 4:4:4 采样时的大小为:

(1280*720*8 + 1280*720*8 + 1280*720*8)/8/1024/1024 = 2.64 MB


YUV422

YUV 4:2:2 采样,意味着每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一个采集一个,Y 分量和 UV 分量按照 2 : 1 的比例采样。如果水平方向有 8 个像素点,那么就采样 8 个 Y 分量,4 个 UV 分量。

图像像素数据: Y0U0V0 Y1U1V1 Y2U2V2 Y3U3V3 
采样的码流: Y0 U0 Y1 V1 Y2 U2 Y3 V3 
为什么叫4:2:2,意思是每4个像素里面有4个Y,2个U,2个V 
Y分量的大小: w*h 
U分量的大小: w*h/2 
V分量的大小: w*h/2

一张 1280 * 720 大小的图片,在 YUV 4:2:2 采样时的大小为:

(1280*720*8 + (1280*720)/2*8 + (1280*720)/2*8)/8/1024/1024 = 1.76 MB

通过与 YUV444 采样进行比较可以算出,YUV 422 采样的图像比 YUV444 采样图像节省了三分之一的存储空间,在传输时占用的带宽也会减少。


YUV420

YUV 4:2:0 采样,并不是指只采样 U 分量而不采样 V 分量。而是指,每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一行按照 2 : 1 进行采样。比如,第一行扫描时,YU 按照 2 : 1 的方式采样,那么第二行扫描时,YV 分量按照 2:1 的方式采样。对于每个色度分量来说,它的水平方向和竖直方向的采样和 Y 分量相比都是 2:1 。

图像像素数据:    [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 
为什么叫4:2:0,意思是每4个像素中有4个Y,2个U,0个V,而下一行的四个像素中有4个Y,0个U,2个V
Y分量的大小: w*h 
U分量的大小: w*h/4 
V分量的大小: w*h/4

一张 1280 * 720 大小的图片,在 YUV 4:2:0 采样时的大小为:

(1280*720*8 + (1280*720)/4*8 + (1280*720)/4*8)/8/1024/1024 = 1.32 MB

可以看到 YUV 420 采样的图像比 RGB 模型图像节省了一半的存储空间,因此它也是比较主流的采样方式。


三、YUV存储格式

YUV 存储格式有两大类:planar 和 packed:

  • planar,平面格式,先连续存储所有像素点的 Y,紧接着存储所有像素点的 U,然后是所有像素点的 V;将几个分量分开存,比如 YUV420 中,data[0] 专门存 Y,data[1] 专门存 U,data[2] 专门存 V。
  • packed,打包格式,每个像素点的 Y, U, V 是连续交错存储的,所有数据都存在 data[0] 中。

根据采样方式和存储格式的不同,就有了多种 YUV 格式。这些格式主要是基于 YUV 4:2:2 和 YUV 4:2:0 采样。常见的基于 YUV 4:2:2 采样的格式如下所示:


YUYV

YUYV 格式是采用打包格式进行存储的,指每个像素点都采用 Y 分量,但是每隔一个像素采样它的 UV 分量,排列顺序如下:

Y0 UO Y1 V0 Y2 U1 Y3 V1

Y0 和 Y1 公用 U0 V0 分量,Y2 和 Y3 公用 U1 V1 分量。


UYVY

UYVY 格式是采用打包格式进行存储,它的顺序和 YUYV 相反,先采用 U 分量再采样 Y 分量,排列顺序如下:

U0 Y0 V0 Y1 U1 Y2 V1 Y3


YUV422P

YUV 422P 格式,又叫做 I422,采用的是平面格式进行存储,先存储所有的 Y 分量,再存储所有的 U 分量,再存储所有的 V 分量。

Y0 Y1 Y2 Y3 U0 U1 V0 V1


猜你喜欢

转载自www.cnblogs.com/linuxAndMcu/p/12164248.html