YUV图像格式详解

一、YUV格式

YUV格式有两大类:packed(打包)格式和planar(平面)格式。

packed:通常是几个相邻的像素组成一个宏像素(macro-pixel),每个像素点的Y、U、V是连续交*存储的。

planar:使用三个数组分开存放Y、U、V三个分量,就像是一个三维数组。

Y明亮度(Luminance或Luma),俗称灰度值;

UV色度(Chrominance或Chroma),作用是描述色彩及饱和度,指定像素颜色。

与我们熟知的RGB类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。并且,YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。

YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0,关于其详细原理,可以通过网上其它文章了解,这里我想强调的是如何根据其采样格式来从码流中还原每个像素点的YUV值,因为只有正确地还原了每个像素点的YUV值,才能通过YUV与RGB的转换公式提取出每个像素点的RGB值,然后显示出来。

    用三个图来直观地表示采集的方式吧,以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量。

YUV图像格式详解_第1张图片

先记住下面这段话,以后提取每个像素的YUV分量会用到。

  1. YUV 4:4:4采样,每一个Y对应一组UV分量
  2. YUV 4:2:2采样,每两个Y共用一组UV分量。 
  3. YUV 4:2:0采样,每四个Y共用一组UV分量。 

二、存储方式

下面介绍各常见YUV码流的存储方式,并在存储方式后面附带取样每个像素点的YUV数据的方法,其中Cb、Cr的含义等同于U、V。

(1)YUYV格式(属于YUV422)

YUYV是YUV422采样的存储格式的一种,相邻的两个Y公用其相邻的两个Cb(U)、Cr(V),对于像素点Y'00、Y'01而言,其Cb、Cr的值均为Cb00、Cr00,其他像素点的YUV取值依次类推。

(2)UYVY格式(属于YUV422)

(3)YUV422P(属于YUV422)

YUV422P是一种Plane模式,即planar模式,先存储所有的Y分量,再存储所有的U,最后存储所有的V。其每个像素点的YUV值提取方法也是遵循YUV422格式的最基本的提取方法,即两个Y公用一个UV,如,对于像素点Y'00、Y'01而言,其Cb、Cr的值均为Cb00、Cr00。

(4)YUV420SP

(5)YUV420P

(6)YV12、YU12格式(属于YUV420)

YU12(又称I420)、YV12属于YUV420格式,是一种Plane模式,将Y、U、V分量分别打包,依次存储。每个像素点的YUV数据提取都遵循YUV420格式的提取方式,即4个Y分量公用一组UV。如图中,Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00,其他以此类推。

注意:YU12与YV12的区别在于是先存U还是先存V。对于YU12来说,存储顺序是YUV,即YCbCr;对于YV12来说,存储顺序是YVU,即YCrCb。所以上图就是YV12了。

(7)NV12、NV21(属于YUV420)

NV12与NV21都属于YUV420格式,是一种two-plane模式,即Y和UV分别为两个Plane,但是UV(CbCr)为交错存储,而不是分为三个plane。其提取方式与上面一种类似,即Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00。

注意:NV21与NV12的区别在于,在UV交替的存储中,NV12是UV(CbCr)交替存储,NV21是VU(CrCb)交替存储,所以上图显示的是NV21。而且NV12是IOS的模式,NV21是Android的模式。

 

你可能感兴趣的:(音视频知识,机器学习)