1.YUV的简介
YUV,是一种颜色编码方法,说白了其实跟RGB类似,也是表示颜色的一种形式,常使用在各个视频处理组件中。 YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。“Y”表示明亮度(Luminance或Luma),也就是灰值,“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
YUV经常在做图像处理算法的时候会用到,Y'UV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠。
YUV主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像(是不是写错了),只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。并且,YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。
2.YUV的存储格式
为节省带宽起见,大多数YUV格式平均使用的每像素位数都少于24位。主要的抽样(subsample)格式有YCbCr4:2:0、YCbCr4:2:2、YCbCr4:1:1和YCbCr4:4:4。YUV的表示法称为A:B:C表示法:
-
4:4:4表示完全取样。每一个Y对应一组UV分量,图像和rgb占用的字小大小一致,均为pixelsize*3。
-
4:2:2表示2:1的水平取样,垂直完全采样。每两个Y共用一组UV分量,占用的大小为pixelsize+pixelsize/2+pixelsize/2。
-
4:2:0表示2:1的水平取样,垂直2:1采样。每四个Y共用一组UV分量,占用大小为pixelsize+pixelsize/4+pixelsize/4。
-
4:1:1表示4:1的水平取样,垂直完全采样。每四个Y共用一组UV分量,占用大小为pixelsize+pixelsize/4+pixelsize/4。
用三个图来直观地表示采集的方式吧,以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量。
可以看到,YUV格式图像信息可以比RGB格式占用的字节码更少,所以可以用yYUV来传输色彩数据,接收到的YUV数据后再转换为RGB来显示图像,从而减少了传输图像占用的带宽。
3.YUV的格式
YUV衍生出了很多格式,主要是由于其存储方式决定的。
YUV按照存储方式可以分成两个大类:
- packed:打包格式是将yuv分量混合存在同一个数组中
- planar:平面格式是将yuv三个分量存成三个数组或者两个数组分别存储
packed存储的YUV的存储先后不同,细分为了YUV、YVU、YVYU、UYVY等等。
planar存储的YUV依据数组数量分成了YUV分别三个数组表示的完全平面的,以及Y一个数组而UV一个数组的半平面(Semi planar)的两类,而半平面的又可以细分为UV和VU两个存储顺序。
常见的YUV格式列表如下:
I420: YYYYYYYY UU VV =>YUV420P
YV12: YYYYYYYY VV UU =>YUV420P
NV12: YYYYYYYY UVUV =>YUV420SP
NV21: YYYYYYYY VUVU =>YUV420SP //安卓Camera默认格式