做过camera, 播放器,图片处理的对YUV都不会陌生,但是关于YUV有很多的格式YUV420, NV21, YUV420sp, YV12等等往往令人混乱
介绍
YUV色彩模型利用人类视觉对亮度的敏感度比对色度的敏感度高的特点获得较RGB色彩模型的优势.Y为亮度信息,UV为色差(Chroma)信息。U/V分别等于blue–luminance/red–luminance. Y信号分量为黑白灰度图。U、V信号分量为单色彩色图。如果只需获取灰度图,只要获取Y分量就好了.
YUV主要用于优化彩色视频信号的传输,使其向后相容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽(RGB要求三个独立的视频信号同时传输)
采样格式
YUV的采样格式主要有3种:YUV444 , YUV422, YUV420
YUV 4:4:4采样,每一个Y对应一组UV分量。
YUV 4:2:2采样,每两个Y共用一组UV分量。
YUV 4:2:0采样,每四个Y共用一组UV分量。
如下图,黑点表示采样该像素点的Y分量,空心圆圈表示采用该像素点的UV分量
存储格式
我们也经常看到YUV420SP, YUV420P 这些后面带这P和SP表示的是存储的方式
两大类:planar和packed。
- 平面格式(planar formats) :先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V,UV的顺序可能会调换
- 紧缩格式(packed formats):对于packed的YUV格式,每个像素点的Y,U,V是连续交替存储的,如yuv444 可能是YUV YUV YUV YUV, yuv420 可能是YYUV,YYUV,UV的顺序可能会调换. 有些代码里面packed 也称为 Interleaved
YUV420SP, YUV420P中的P表示的都是planar, SP 是 semi-Planar .他们的区别是
- YUV420P: YUV都是planer格式, 即 YYYY UU VV的顺序(UV的顺序可能会调换)
- YUV420SP: Y是planer格式, UV是packet格式,即 YYYY YYYY UV UV的顺序(UV的顺序可能会调换)
常见的代码中YUV格式定义
- NV21
这是Android camera1 常用的格式
属于YUV420sp, 即YYYY YYYY VU VU - NV12
属于YUV420sp, 即YYYY YYYY UV UV - YV12
属于YUV420p, 即 YYYY YYYY VV UU - YU12:
属于YUV420p, 即 YYYYYYYY UUVV - YUV_420_888
Android camera2引入了这个格式,解析起来比较复杂点. 420表示YUV420格式的集合,888 表示表示Y、U、V分量中每个颜色占8bit.
其他人的博客有关于YUV_420_888的讲解,这里转一下
Android: Image类浅析(结合YUV_420_888)
内存空间的计算
以yuv420为例
Y = width * height
U = Y / 4
V = Y / 4
所以一帧YUV420的图片 占用的内存空间大小为
Y + U + V = width * height + width * height / 4 + width * height / 4 = width * height * 3 /2
参考
https://blog.csdn.net/asahinokawa/article/details/80596655
https://www.cnblogs.com/justkong/p/6570914.html