摘要
在研究android Camera2 API的时候,涉及到采集视频信息。其中,在采集视频的时候,可以设置多种类型格式的图像数据,其中一个就是yuv_420_888,如果需要进行编码压缩,我们还需要将该格式的数据转转想要的格式后方能根据压缩算法进行压缩。本文记录一下,我所知的几种常用的yuv数据格式。
介绍
YUV是一种颜色编码方法,是编译true-color颜色空间(color space)的种类,常使用在各个视频处理组件中。 YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。其中的“Y”表示明亮度,也就是灰阶值,即黑到白的范围值,所以只有Y值的图像,是黑白的,“U”表示色彩值,“V”表示色彩的饱和度,“U”“V”用于指定像素的颜色。
YUV两大类格式:
平面格式(planar formats)
- 将Y、U、V的三个分量分别存放在不同的矩阵中。先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
紧缩格式(packed formats)
-
将Y、U、V值存储成MacroPixels数组,和RGB的存放方式类似,每个像素点的Y,U,V是连续交替存储的。
为节省带宽起见,大多数YUV格式平均使用的每像素位数都少于24位。主要的抽样(subsample)格式有YCbCr4:2:0、YCbCr4:2:2、YCbCr4:1:1和YCbCr4:4:4。
YUV的表示法称为A:B:C表示法:
4:4:4表示完全取样。
4:2:2表示2:1的水平取样,垂直完全采样。
4:2:0表示2:1的水平取样,垂直2:1采样。
4:1:1表示4:1的水平取样,垂直完全采样。
图示
下面图示几种常见的yuv存储格式。
1 YUV444类型
每个像素点都存储对应的YUV值,所以,在1080x1920的图像中,需要1080x1920x(1Y + 1U + 1V)(字节)≈ 0.7MB来存储。
1.1 I444类型
在屏幕像素上的分布表示:

在数组中存储的分布表示:
即先存Y,再存U,后存V的格式。
1.2 YV24类型
在屏幕像素上的分布表示:
在数组中存储的分布表示:
即先存Y,再存V,后存U的格式。
2 YUV422类型
每两个像素点共用一对UV值,所以,在1080x1920的图像中,需要1080x1920x(1Y+ 0.5U + 0.5V)(字节)≈ 0.5MB来存储。
在屏幕像素上的分布表示:
2.1 YUV422
在数组中存储的分布表示:
(YUYV)
(YVYU)
2.2 YUV422P
在数组中存储的分布表示:
YU16、I422
YV16
2.3 YUV422SP
在数组中存储的分布表示:
NV16
NV61
3 YUV420类型
每四个像素点共用一对UV值,所以,在1080x1920的图像中,需要1080x1920x(1Y+ 0.25U + 0.25V)(字节)≈ 0.3MB来存储。
在屏幕像素上的分布表示:
3.1 YUV420P
在数组中存储的分布表示:
YU12、I420
YV12
3.2 YUV420SP
在数组中存储的分布表示:
NV12
NV21
总结
了解了以上的YUV格式后自己才能自由的转换。