【音视频】图片YUV数据格式
一、YUV简介
YUV的原理是把亮度与色度分离,研究证明,人眼对亮度的敏感超过色度。利用这个原理,可以把色度信息减少一点,人眼也无法查觉这一点。YUV三个字母中,其中”Y”表示明亮度(Lumina nce或Luma),也就是灰阶值;而”U”和”V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度
,用于指定像素的颜色
。用这个三个字母好象就是通道命令
重点内容
其优点在于:与黑白YUV转换快、YUV数据大小小于RGB格式。
二、采样
色度通道(UV)
的采样率可以低于亮度通道(Y),而不会显着降低感知质量。以A:B:C的表示法分别表示Y、U、V的频率。
- 4:4:4
- 4:2:2
- 4:2:0
- 4:1:1
三、存储格式
YUV 在存储上通常分为平面格式(Planar)
,半平面格式(Semi-Planar)
以及打包格式(Packed)
。
Planar平面格式(P)
Y、U、V这三个分量分别使用单独的数组保存,在计算使用过程中比较方便。
YU12(I420)
YU12即I420,也叫IYUV。如图,三个平面分别存储YUV三个分量。每四个Y分量共享一组UV分量。
从图中可看出,U、V 平面的每行字节数的宽、高都是 Y 平面的一半。
I420在音视频开发中非常常见且重要的一种格式。
YV12
它与I420非常像,只是改变了U、V平面的顺序。因此整体的排序如下图:
J4XX
注意JXXX的格式与I4XX非常像,不同之处在于JXX具有完整范围的亮度(Y):0-255。而不是像IXX的范围:16-240。在色度(UV)分量上完全一致
I422
每两个 Y 分量共享一组 UV 分量。U、V 平面的元素量, 宽度是 Y 平面的一半,但高度与 Y 平面一致。
Semi-Planar半平面格式(SP)
半平面格式具有两个平面而不是三个平面,一个平面存储亮度(Y)分量,另一个平面存储两个色度(UV)分量。
NV12
两个平面,分别存储 Y 分量 和 UV 分量。其中 UV 分量共用一个平面并且以 U, V, U, V 的顺序交错排列。每四个 Y 分量共享一组 UV 分量。
可以看出,uv平面的每行字节数与Y平面一致,高度却是Y平面的一半。
NV12是IOS相机可直接输出的两种视频帧格式之一,另一种是BGRA32。
NV21
与NV12几乎一致,区别在于UV平面中的U、V的排列顺序颠倒。
NV21是Android相机的默认输出视频帧格式
。
Packed打包格式
打包格式通常只有一个平面,所有亮度(Y)和色度(UV)数据都交织在一起。有点类似于 RGB 格式,只是使用了不同的色彩空间。
打包格式在网络摄像头中较为常见。硬件设备使用多平面格式效率较低,因为每个像素需要多次内存访问。而打包格式由于仅一个平面,访问内存的开销较小。
AYUV
AYUV 是 Packed 打包格式,其中每个像素编码为四个连续字节,每个像素在内存中按照 V, U, Y, A 的顺序排列(A 指 alpha 通道)。
YUYV
包括YUY2等
YUY2 是 Packed 打包格式,其中两个像素共用一组 UV 分量,内存中按照 Y U Y V 的顺序排列,如下图所示:
UYVY
包括Y422等
UYVY与YUYV类似,只是亮度(Y)分量与色度(UV)分量排列顺序颠倒,如下图所示:
四、代码实例
例:分离YUV422像素中的Y、U、V分量
由于YUV的数据是以Planar的格式平铺的,因此可以将数据分段取出,并放置在文件中即可查看YUV各数据图片的样式。