网上讲的够多了,贴个详细的讲解
YUV图片?
每个图片由像素点构成,YUV图片就是由Y,U,V三个维度来确定一个像素点。
所谓YUV420,YUV422是什么?
指的是采样频率,YUV420指的是每四个一组,Y采集4次,U采集2次,V采集0次
YUV420并不是V不采集,而是
第一行:Y采集4次,U采集2次,V采集0次
第二行:Y采集4次,U采集0次,V采集2次
第三行:Y采集4次,U采集2次,V采集0次
第四行:Y采集4次,U采集0次,V采集2次
.....
图片显示时,每上下左右四个Y共享一组UV
举例:
原图:
[Y0 U0 V0][Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
[Y5 U5 V5][Y6 U6 V6] [Y7 U7 V7] [Y8 U8 V8]
(每个中括号当中为一个像素点的Y、U、V三个维度)
原图采样后数据流:
Y0 U0 Y1 Y2 U2 Y3
Y5 V5 Y6 Y7 V7 Y8
(如上述,每四个一组,Y采集4次,U采集2次,V采集0次 \ Y采集4次,U采集0次,V采集2次)
图片显示:
[Y0 U0 V5][Y1 U0 V5][Y2 U2 V7][Y3 U2 V7]
[Y5 U0 V5][Y6 U0 V5][Y7 U2 V7][Y8 U2 V7]
(如上述,每上下左右四个Y共享一组UV,Y0 Y1 Y5 Y6四个Y共享 U0 V5 这一组UV)
同理,YUV422,YUV411,YUV410,YUV444这些都是采样率与存储的方式。
YUV422指的是每四个一组,Y采集4次,U采集2次,V采集2次
YUV411指的是每四个一组,Y采集4次,U采集1次,V采集1次
YUV410指的是
第一行:Y采集4次,U采集1次,V采集0次
第二行:Y采集4次,U采集0次,V采集1次
YUV444指的是.....
所以对于RGB图来说,一个像素点由R、G、B三个维度来构成,假设每个维度都由8bit(一个字节)来表示,
也就是说 R 维度有256个不同的值,256个不同的大小;
也就是说 G 维度有256个不同的值,256个不同的大小;
也就是说 B 维度有256个不同的值,256个不同的大小。
所以RGB图的一个像素点,内存中占用的大小为 1个字节+1个字节+1个字节,也就是3个字节。
而YUV因为采样率不同,采样率低的图,所占用的内存大小要比RGB小很多。
例如YUV420图,因为每四个Y共享一组UV,假设每个维度都由8bit(一个字节)来表示,那么一个像素所占的内存大小只有一个Y,1/4个U,1/4个V。
一个像素的大小就是1字节+1/4字节+1/4字节,也就是1.5个字节,比RGB图要小一倍。
例如:
安卓手机中使用的NV21格式的yuv图就是YUV420。
这张图的大小,就是 2384x5424x1.5 = 19,396,224 字节
所谓NV21,NV12,YV12是什么?
是YUV图片的存储方式。在最上面的连接中有介绍。
例如NV12,他是YUV420格式的一种在文件/内存中的存储方式,特点是先存Y,后存UV,数据矩阵长这样:
NV21和NV12差别不大,就是UV组存储时,NV12先U后V,NV21先V后U。
其余的有各种不同的存储方式,详细在最上的连接中。