【音视频】图片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数据格式_字节数

三、存储格式

YUV 在存储上通常分为​​平面格式(Planar)​​​,​​半平面格式(Semi-Planar)​​​以及​​打包格式(Packed)​​。

Planar平面格式(P)

Y、U、V这三个分量分别使用单独的数组保存,在计算使用过程中比较方便。

YU12(I420)

YU12即I420,也叫IYUV。如图,三个平面分别存储YUV三个分量。每四个Y分量共享一组UV分量。


【音视频】图片YUV数据格式_帧格式_02

从图中可看出,U、V 平面的每行字节数的宽、高都是 Y 平面的一半。
I420在音视频开发中非常常见且重要的一种格式。

YV12

它与I420非常像,只是改变了U、V平面的顺序。因此整体的排序如下图:

【音视频】图片YUV数据格式_帧格式_03

J4XX

注意JXXX的格式与I4XX非常像,不同之处在于JXX具有完整范围的亮度(Y):0-255。而不是像IXX的范围:16-240。在色度(UV)分量上完全一致

I422

每两个 Y 分量共享一组 UV 分量。U、V 平面的元素量, 宽度是 Y 平面的一半,但高度与 Y 平面一致。

【音视频】图片YUV数据格式_帧格式_04

Semi-Planar半平面格式(SP)

半平面格式具有两个平面而不是三个平面,一个平面存储亮度(Y)分量,另一个平面存储两个色度(UV)分量。

NV12

两个平面,分别存储 Y 分量 和 UV 分量。其中 UV 分量共用一个平面并且以 U, V, U, V 的顺序交错排列。每四个 Y 分量共享一组 UV 分量。

【音视频】图片YUV数据格式_帧格式_05

可以看出,uv平面的每行字节数与Y平面一致,高度却是Y平面的一半。
NV12是IOS相机可直接输出的两种视频帧格式之一,另一种是BGRA32。

NV21

与NV12几乎一致,区别在于UV平面中的U、V的排列顺序颠倒。


【音视频】图片YUV数据格式_字节数_06

​NV21是Android相机的默认输出视频帧格式​​。

Packed打包格式

打包格式通常只有一个平面,所有亮度(Y)和色度(UV)数据都交织在一起。有点类似于 RGB 格式,只是使用了不同的色彩空间。

打包格式在网络摄像头中较为常见。硬件设备使用多平面格式效率较低,因为每个像素需要多次内存访问。而打包格式由于仅一个平面,访问内存的开销较小。

AYUV

AYUV 是 Packed 打包格式,其中每个像素编码为四个连续字节,每个像素在内存中按照 V, U, Y, A 的顺序排列(A 指 alpha 通道)。


【音视频】图片YUV数据格式_字节数_07

YUYV

包括YUY2等
YUY2 是 Packed 打包格式,其中两个像素共用一组 UV 分量,内存中按照 Y U Y V 的顺序排列,如下图所示:


【音视频】图片YUV数据格式_音视频_08

UYVY

包括Y422等

UYVY与YUYV类似,只是亮度(Y)分量与色度(UV)分量排列顺序颠倒,如下图所示:

【音视频】图片YUV数据格式_数据_09

四、代码实例

例:分离YUV422像素中的Y、U、V分量

由于YUV的数据是以Planar的格式平铺的,因此可以将数据分段取出,并放置在文件中即可查看YUV各数据图片的样式。