YUV FORMAT
YUV简介
YUV是一种颜色编码方法,它和我们熟知的RGB红绿蓝颜色体系相对应,它们之间能通过公式相互转换。YUV将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的。
YUV将亮度Y和色差UV三个信号分别进行编码,用同一信道发送出去。YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。
YUV 三个字母的意义分别为:
- Y:亮度,就是灰度值。除了表示亮度信号外,还含有较多的绿色通道量。单纯的 Y 分量可以显示出完整的黑白图像。
- U:蓝色通道与亮度的差值。
- V:红色通道与亮度的差值。
其中,U、V 分量分别表示蓝 (blue)、红 (red) 分量信号,只含有色度信息,所以 YUV 也称为 YCbCr,其中,Cb、Cr的含义等同于U、V,C 可以理解为 component 或者 color。
第一幅是Y分量描述黑白图像,第二幅是U(V)分量描述,第三幅是V(U)分量描述,第四幅是YUV三幅合成后得到的正常图像
人眼对亮度的敏感超过色度,即使把色度信息减少一点,人眼也无法查觉这一点。如果一张图片使用YUV格式保存将更少地占用存储空间。
以采集视频为例,RGB24格式一帧的大小size=width×heigth×3 Bit,RGB32的size=width×heigth×4,如果是I420(即YUV标准格式4:2:0)的数据量是 size=width×heigth×1.5 Bit
YUV详解
YUV的存储格式
YUV的存储格式有两大类:planar和packed。
对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
对于packed的YUV格式,每个像素点的Y,U,V是连续交替存储的。
YUV的采样方式
YUV采样方式,主要描述像素Y、U、V分量采样比例,即表达每个像素时,Y、U、V分量的数目,通常有三种方式:YUV4:4:4,YUV4:2:2,YUV4:2:0。
YUV4:4:4采样,每一个Y对应一组UV分量。
YUV4:2:2采样,每两个Y共用一组UV分量。
YUV4:2:0采样,每四个Y共用一组UV分量。
用图直观地表示采集的方式,以黑点表示采样该像点的Y分量,以空心圆圈表示采用该像素点的UV分量
使用YUV4:4:4采样,一共要进行12次采样分别4个Y,4个U,4个V,对每一个Y,U,V每个需要8个比特位,就需要12*8=96位,平均下每个像素点需要96/4=24位比特位表示。
使用YUV4:2:2采样,就需要8*8 =64位,平均每个像素64/4=16位。
使用YUV4:2:0采样,就需要6*8 =48位,平均每个像素48/4=12位。
常见的YUV码流的存储方式
Cb、Cr的含义等同于U、V
YUVY 采用422采样格式,packed存储格式
YUVY 采用422采样格式,Planar存储格式
YUV420
YUV420P 和 YUV420SP
- YUV420p:又叫planer平面模式,Y ,U,V分别再不同平面,也就是有三个平面。
- YUV420sp:又叫bi-planer或two-planer双平面,Y一个平面,UV在同一个平面交叉存储。
YUV420P –> YUV420SP
NV12 和 NV21
- NV12:IOS只有这一种模式。存储顺序是先存Y,再UV交替存储。YYYYUVUVUV
- NV21:安卓的模式。存储顺序是先存Y,再存U,再VU交替存储。YYYYVUVUVU
NV12: UV交替
NV21: VU交替
YUV420的内存计算
1 | Y = width * hight |
YUV420中
- V的步长(也就是宽)是Y的步长的一半,V的行高也是Y的一半。
- U的步长和行高与V相同,也就是都是Y的一半。
- U 和 V 的内存占用为都Y的 1/4,
U + V
的内存占用为 Y 的 1/2
所以YUV420 数据在内存中的长度是 width * hight * 3 / 2 = width * hight * 1.5
以720×488大小图象YUV420 planar为例,
其存储格式是: 共大小为720 × 480× 3 × 1.5字节,
分为三个部分:Y,U和V
Y分量: (720×480)个字节
U(Cb)分量:(720×480 × 1/4)个字节
V(Cr)分量:(720×480 × 1/4)个字节
三个部分内部均是行优先存储,三个部分之间是Y,U,V 顺序存储。
即YUV数据
0--720×480字节是Y分量值,
720×480--720×480×5/4字节是U分量
720×480×5/4 --720×480×3/2字节是V分量。
YUV422
每两个Y共用一组UV分量。U/V的步长(也就是宽)是Y的步长的一半,但高与 Y 相同。
1 | Y = width * hight |
NV16 和 NV61
NV16: UV 交替
NV61: VU 交替
1 | NV16: |
YUV420与YUV422
UV分量的长都是 Y的一般,仅有宽不同, 420 UV的宽是Y的 1/2, 422 UV的宽与 Y 相同
YUV400
灰度数据,没有色度数据, 即仅有 Y 分量
YUV常用格式附录
格式 | Mode | 通道 | 比特 | 示例 |
---|---|---|---|---|
GRAY | Planar | 1 | 8 | 400. Y0Y1…Y15 |
I420 | Planar | 3 | 12 | 420. Y0Y1..Y15 U0U1U2U3 V0V1V2V3 * 常用 理解为YU12 |
IYUV | Planar | 3 | 12 | 同I420 |
YUV420P | Planar | 3 | 12 | 同I420 * 感觉 YUV420P 名字更常用 |
YUVJ420P | Planar | 3 | 12 | 同I420,不同的是色彩转换公式,YUVJ使用 JPEG 公式, 输出数据范围[0..255], I420的范围是 [16-240] |
YV12 | Planar | 3 | 12 | 420. Y0Y1..Y15 V0V1V2V3 U0U1U2U3 * 常用 很多编解码器都用这个格式输入输出 |
YVU420P | Planar | 3 | 12 | 同YV12 |
NV12 | Planar | 2 | 12 | 420. Y0Y1..Y15 U0V0U1V1…..U3V3 *常用 |
NV21 | Planar | 2 | 12 | 420. Y0Y1..Y15 V0U0V1U1…..V3U3 |
YV16 | Planar | 3 | 16 | 422. Y0Y1..Y15 V0V1..V7 U0U1..U7 |
YUV422P | Planar | 3 | 16 | 同YV16 * 感觉 YUV422P 名字更常用 |
I422 | Planar | 3 | 16 | 同YV16 |
UYVY | Packed | 1 | 16 | 422. U0Y0V0Y1 |
Y422 | Packed | 1 | 16 | 同UYVY |
YUY2 | Packed | 1 | 16 | 422. Y0U0Y1V0 |
YUV422 | Packed | 1 | 16 | 同YUY2 |
YUYV | Packed | 1 | 16 | 同YUY2 |
YVYU | Packed | 1 | 16 | 422. Y0V0Y1U0 |
YU16 | Planar | 3 | 16 | 422. Y0Y1..Y15 U0U1..U7 V0V1..V7 |
NV16 | Planar | 2 | 16 | 422. Y0Y1..Y15 U0V0U1V1..U7V7 |
YV24 | Planar | 3 | 24 | 444. Y0Y1..Y15 V0V1..V15 U0U1..U15 |
I444 | Planar | 3 | 24 | 同YV24 |
IYU2 | Packed | 1 | 24 | 444. U0Y0V0 |