RV1126 NO.5 YUV原理的讲解

1.什么是YUV格式

YUV是一种常见的视频像素格式,经常用在视频编解码上面,YUV分别由Y分量和U、V分量(红色投影Cr)组成。Y分量指的是亮度分量,也就是我们经常说的灰阶值,相当于一副灰色的图像。而U分量和V分量表示的是色度分量,它的作用就是用于影像的色彩以及饱和度,常用于指定像素的颜色,U分量是图像蓝色部分去掉亮度Y,V分量是图像红色部分去掉亮度Y。换言之如果一副图像只有Y分量,没有UV分量就相当于我们看黑白电视一样,没有颜色,所以现在大部分彩色电视都引用了YUV像素格式。

2.YUV的优势

YUV和RGB是目前最流行的两套颜色格式,但是在我们音视频编解码和网络传输的时候基本上都会用YUV格式,而非RGB格式。这是由于YUV在网络传输的时候只需要占用很少的带宽进行传输,这能够大大节约存储空间、并且提高传输效率。比方说,使用YUV420P格式进行采样能够比RGB节约超过1/2的存储空间。

3.YUV采样格式

面我们来说下YUV的采样格式,现在主流的YUV采样方式一般分三种分别是:YUV444、YUV422、YUV420。我们来看看这三种采样格式的区别:

3.1YUV444

YUV444采样,相当于Y、U、V三个分量采用相同的采样比例进行采样。所以用YUV444采样生成的图像,YUV三个分量的信息是完整的,都是8bit,也就是一个字节。这里的YUV444顾名思义就是4个Y分量、4个U分量、4个V分量。Y分量大小:w * h;U分量大小:w * h;V分量大小:w * h。所以,我们用YUV444格式去采样一个1920 * 1080的图像的时候,得到的大小等于:(1920 * 1080 * 8 + 1920 * 1080 * 8 + 1920 * 1080 * 8)/8/1024/1024 ~= 5.94M。从计算公式可以看出,YUV444每一帧图像大小和RGB差不多,所以在真正开发中很少会用到。

我来解释一下(1920 * 1080 * 8 + 1920 * 1080 * 8 + 1920 * 1080 * 8)/8/1024/1024 ~= 5.94M公式含义   

1.初始计算:总比特数

每个分量的总比特数 = 宽度 × 高度 × 每像素比特数 = 1920 × 1080 × 8

三个分量的总比特数 = 1920×1080×8 + 1920×1080×8 + 1920×1080×8 = 1920×1080×8×3

2.转换为字节(/8)

1字节 = 8比特,因此需要将总比特数除以8,得到总字节数:

总字节数 = (1920×1080×8×3) / 8 = 1920×1080×3
3.转换为MB(/1024/1024)

 1 MB = 1024 KB = 1024×1024 字节,因此需要将总字节数依次除以1024两次:

总MB数 = (1920×1080×3) / (1024×1024) ≈ 5.94 MB
 

3.2. YUV422:

YUV422采样,相当于U、V分量是以Y分量采样的一半进行采样,Y分量和UV分量按照2:1的比例进行采样(也可以理解为两个Y分量对应一个UV分量)。就比方说,若一个水平方向有8个像素点,那么采样了8个Y分量,那么UV分量只有4个。这里采样用的是4个Y分量、2个U分量、2个V分量进行采样。Y分量大小:w * h;U分量:w * h /2;V分量:w * h /2。所以,用YUV422采样的大小是:(1920 * 1080 * 8 + (1920 * 1080)/2 * 8 + (1920 * 1080)/2 * 8)/8/1024/1024 ~= 3.96M。

3.3. YUV420:

YUV420采样,相当于每一行扫描的时候只扫描一种色度分量(U分量或者V分量),和Y分量按照2:1的方式进行采样(也可以理解为四个Y分量对应一个UV分量)。就比方说,在第一行扫描的时候,YV分量按照2:1的方式进行采样,那么YU分量也是用2:1的方式采样,所以对于每个色度分量来说,它的水平方向和垂直方向的采样比都是2:1。这里采用的是4个Y分量、2个U分量、0个V分量采集,而下一行的则是用4个Y分量、0个U分量、2个V分量采样。所以,Y分量大小:w * h;U分量:w * h /4;  V分量:w * h/4。所以用YUV420采集一个1920 * 1080的图像大小:(1920 * 1080 * 8 + (1920 * 1080)/4 * 8 + (1920 * 1080)/4 * 8)/8/1024/1024 ~=2.97M 。可以看到用YUV420采样的图像比YUV444和YUV422都节省空间,因此它是目前最主流的采样格式。

5.YUV存储格式

YUV存储一般分为两大类,一种是Planar,另外一种是Packed。

Planar指的是平面格式:它的特点是先连续存储所有的Y像素点,然后再存储所有的U像素点,最后存储所有的V像素点。换言之它分三个数组存储三个分量,比方说data[0]存储所有的Y分量、data[1]存储所有的U分量、data[2]存储所有的V分量。

Packed指的是打包格式:它的特点是所有像素点的YUV分量都是连续存储,并且所有的数据都存储在data[0]里面。

所以根据采样方式的不同和存储方式的不同,在实际开发中就有了多种YUV格式,主要是针对YUV420和YUV422:

YUV420采样格式,就有这几种打包格式:NV12、NV21、YV12、YU12

NV12:这种方式使用的是平面格式来存储数据,换言之就是先存储Y分量、 然后UV交替存储。

Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 U0 V0...

NV21:这种方式使用的是平面格式来存储数据,换言之就是先存储Y分量、 然后VU交替存储。

Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 V0 U0...

YV12:这种方式使用的是平面格式来存储数据,换言之就是先存储Y分量、 然后存V分量、 最后存U分量,

Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 V0 U0...

YU12:这种方式使用的是平面格式来存储数据,换言之就是先存储Y分量、 然后存U分量、 最后存V分量,

Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 U0 V0...

YUV422采样格式,就有这几种打包格式:YUYV、UYUV、YUV422P

YUYV:采用的是打包方式存储,它的特点是每个像素点采用Y分量存储,但是每隔一个像素点用UV分量采样

Y0 U0 Y1 V0 Y2 U2 Y3 V2

UYVY:采用的是打包方式存储,它的特点是每个像素点采用U分量再采样Y分量

U0 Y0 V0 Y1 U2 Y2 V2 Y3

YUV422P:采用的是平面方式存储,它的特点是先存储所有的Y分量、然后在存储U分量、最后存储V分量Y0

Y0 Y1 Y2 Y3 U0 U1 V0 V1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值