
YUV(也称YCbCr)是电视系统所采用的一种颜色编码方法。其中 Y 表示明亮度,也就是灰阶值,它是基础信号;U 和 V 表示的则是色度,UV 的作用是描述影像色彩及饱和度,它们用于指定像素的颜色。U和V不是基础信号,它俩都是被正交调制的.
YUV与RGB视频信号相比,最大的优点在于只需占用极少的带宽,YUV只需要占用RGB一半的带宽。
与我们熟知的 RGB 类似,YUV也是一种颜色编码方法,被欧洲电视系统采用。主要用于电视系统以及模拟视频领 域,它将亮度信息(Y)与色彩信息(UV)分离, 没有UV信息一样可以显示完整的图像,只不过是黑白的 ,这样的 设计很好地解决了彩色电视机与黑白电视的兼容问题。 但在现今,YUV通常已经在电脑系统上广泛使用。
主要的采样格式有YCbCr 4:2:0、YCbCr 4:2:2 和 YCbCr 4:4:4 ,其中 YCbCr 4:2:0是最常用的采样格式。
YUV三个信道的抽样率相同,因此在生成的图像里,每个象素的三个分量信息完整(每个分量通常8比特),经过8比特量化之后,未经压缩的每 个像素占用3个字节 。
每个色差信道的抽样率是亮度信道的一半,所以水平方向的色度抽样率只是4:4:4的一半。对非压缩的8比特量化的图像来说,每个由两个水平方向相邻的像素组成的宏像素需要占用4字节内存。
4:2:0并不意味着只有Y、Cb两个分量,而没有Cr分量。它实际指得是对 每行扫描线来说,只有一种色度分量 ,它以2:1的抽样率存储。 相邻的扫描行存储不同的色度分量 ,也就是说, 如果一行是4:2:0的话,下一行就是4:0:2 ,再下一行是4:2:0…以此类推。对每个色度分量来说, 水平方向和竖直方向的抽样率都是2:1 ,所以可以说色度的抽样率是4:1。对非压缩的8比特量化的视频来说,每个由2x2个2行2列相邻的像素组成的宏像素需要占用6字节内存。
我们用三个图来直观地表示采集的方式吧,以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量。
YUV 4:4:4采样,每一个Y对应一组UV分量。
YUV 4:2:2采样,每两个Y共用一组UV分量。
YUV 4:2:0采样,每四个Y共用一组UV分量,如图中的红色部分。
YUV存储格式分为两大类:planar(平面)格式 和 packed(打包)格式。对于planar格式,先连续存储所有像素点的Y分量,紧接着存储所有像素点的U分量,最后是所有像素点的V分量。对于packed格式,每个像素点的 Y、U、V 分量是连续交叉存储的。由于我们比较常用的是YUV 4:2:0格式,所以我们下面只介绍它的存储格式,其它如YUV 4:4:4 和 YUV 4:2:2请大家参阅其它文章。
YUV420P中的Y、U、V分量都是平面格式,如下图所示:
YUV420P又分为 I420 和 YV12 两种格式。I420格式和YV12格式的不同处在U平面和V平面的位置不同。在I420格式中,U平面紧跟在Y平面之后,然后才是V平面(即:YUV);但YV12则是相反(即:YVU)。
YUV420SP中的Y分量为平面格式,UV分量为打包格式,即 U 和 V 分量交错排列。如下图所示:
YUV420SP也分为两种格式 NV12 和 NV21,这两种格式的不同在于UV交错排列的顺序不同。
本篇文章为大家介绍了什么是YUV,YUV和采样格式及其存储格式。这里并没有介绍RGB与YUV之间的转换,有兴趣的可以自行查阅相关信息。
在视频中的数据保存和传输都是YUV数据格式。主要是为了降低数据大小,如果argb格式数据,1px可能需要4个字节,而YUV可能就只需要1.5个字节。简单的讲YUV是一种图像和视频的编码方式,RGB通过三种颜色来表达现实世界中的各种颜色,YUV通过 亮度 与 色度饱和度 来表示颜色。
RGB很好理解,它更直观。从学生开始就认识绘画的颜料是用三种颜色调配来的,汽车的油漆颜色也是RGB三种颜色调配而来的。
YUV的出现有它的历史意义但也是一种必然。它基于人眼对亮度的敏感度比色彩的敏感度更高的特点。Y表示亮度也可以理解在灰度值,最低的亮度就是黑色最高的亮度就是白色,中间的可呈现出灰色。
在黑白电视机向彩色电视机过渡的年代,黑白电视机只需要YUV中的一个分量Y就可以呈现出黑白画面。UV分量用在彩色电视机上即可呈现出彩色了。YUV可以带来更高的帧内压缩比,由于人眼对黑白更敏感,YUV可以弱化不敏感的信息,减少UV分量的采样。RGB24的每个像素需要3*8个字节,YUV呢?不同的YUV采样方式压缩比有所不同。
电视信息使用的是YUV而数字信息使用的是 YCrCb 命令,以下统称YUV。
YUV简介
与RGB类似,YUV也是一种颜色编码方法,主要用于视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样设计解决了彩色电视机与黑白电视的兼容问题。
YUV,分为三个分量,“Y"表示明亮度(Luminance或Luma),也就是灰度;而”U"和“V”表示是色度(Chrominance或Chroma),作用于指定像素的颜色。
UV即CbCr(C代表颜色color,b代表蓝色blue,r代表红色red)
分类
YUV格式的两大类:平面(plannr)和紧凑(packed)。
对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随是存储所有像素点的V,或者是先v后u
对于packed的YUV格式,每个像素点的Y,U,V是连续交替存储的。比如YUV420P 其中P表示紧凑,YUV420SP其中的SP表示“半紧凑”。
采样
主流的采样方式有三种,YUV4:4:4,YUV4:2:2 ,YVU4:2:0
YUV4:4:4采样,每一个Y对应一组UV分量,一个YUV占8+8+8=24bits 3个字节。
YUV4:2:2采样,每两个Y共用一组UV分量,一个YUV占8+4+4=16bits 2个字节。
YUV4:2:0采样,每四个Y共用一组UV分量,一个YUV占8+2+2 = 12bits 1.5个字节。
最觉的YUV420P和YUV420SP都是基于4:2:0采样的,所以如果图片的宽为width,高为height,在内存中占的空间width*height*3/2,其中前width*height的空间存放Y分量,接着width*height/4存放U分量,最后width*height/4存放V分量。
YUV格式
常见的YUV格式有YUY2、YUYV、YVYU、UYUV、AYUV、Y41P、Y411、Y211、Y211、IF09、IYUV、YV12、YVU9、YUV411、YUV420等,Android中比较常见是YUV420分两种:YUV420P和YUV420SP。以下为YUV420P和YUV420SP。
YUV420P
YUV420P是平面模式,Y、U、V分别在不同平面,也就是有三个平面。它是YUV标准格式4:2:0,为了更方便的看如下表示 :
为了说明存储方式,每一组用不同颜色表示。每一种颜色都是一组,每四个Y共用一组UV分量。
比如:
Y1、Y2、Y7、Y8共用U1,V1;
Y3、Y4、Y9、Y10共用U2,V2;
Y5、Y6、Y11、Y12共用U3,V3;
Y13,Y14,Y19,Y20共用U4,V4
Y17,Y18,Y23,Y24共用U6,V6
那么真实的在字节流中就是按照行从左到右一行一行的拼起来的:
YUV420分为:YU12和YV12
YUV格式
在Android中也叫作I420格式,首先是所有Y值 ,然后是所有U值,最后是所有V值。比如6*6的图片,内存大小就是6*6*3/2 = 54个字节。为了更清晰的查看,我们换行看,真实的是一行byte[]数据流。
1 YYYYYY
2 YYYYYY
3 YYYYYY
4 YYYYYY
5 UUUUUU
6 VVVVVV
YV12格式
YV12格式与YU12格式,首先是所有Y值,然后是所有V值,最后是所有U值。比如6*6图片,内存大小就是6*6*3/2=54字节
1 YYYYYY
2 YYYYYY
3 YYYYYY
4 YYYYYY
5 VVVVVV
6 UUUUUU
YUV420SP
YUV420SP也是平面模式。分为NV21和NV12两种格式。Y是一个平面,UV是一个平面, UV/VU为交替存储,而不是分为三个平面。
在Android Camera中文档强烈推荐使用NV21和YU12,因为这两种格式支持所有的相机设备。
Camera默认输出YUV的数据格式为NV21。但是在Camera2中推荐使用格式则是YUV_420_888。
NV21格式
在Android Carmra中手机从摄像头采集的预览数据默认值是NV21。
NV21存储顺序是先存Y值,再VU交替存储:YYYVUVUVU,比如6*6的图片,内存大小就是6*6*3/2=54个字节。
1 YYYYYY
2 YYYYYY
3 YYYYYY
4 YYYYYY
5 VUVUVU
6 VUVUVU
NV12格式
NV12存储顺序是先存Y值,再UV交替存储:YYYUVUVUV,比如6*6的图片,内存大小就是6*6*3/2=54字节。
1 YYYYYY
2 YYYYYY
3 YYYYYY
4 YYYYYY
5 UVUVUV
6 UVUVUV
这里先熟悉下Android中常见的YUV420P和YUV420SP。一般我们在使用yuv数据的时候,会对yuv数据进行变换,比如:摄像头数据旋转,从一种格式转为另一种数据等。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)