YUV简介
一、简介
- YUV格式:一种彩色编码系统,主要用在视频、图形处理流水线中(pipeline)。Y表示明亮度(单取此通道即可得灰度图),U和V则是描述图像的色彩饱和度。
- 与RGB的区别:人眼的视觉特点是对亮度敏感,对位置、色彩相对来说不敏感。YUV利用这一特点,将颜色的亮度信息、色彩信息分开处理,在人眼察觉不到的前提下,削减了颜色的色彩信息的数据量,达到了减小图像数据量的目的。
- 运用场景:数据传输,采集到的视频数据一般是 RGB24,为了节省带宽,一般需要经过 编码转换(RGB2YUV) 为 NV12 进行传输;应用时一般需要经过 解码转换(YUV2RGB) 为 RGB 用于显示或后续算法。
二、YUV数据格式
- 格式树 YUV 格式树
-
YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0:
YUV 4:4:4采样:每一个Y对应一组UV分量。每个像素点有一个Y分量+一个U分量+一个V分量,所以YUV4:4:4和rgb一样每个像素点占用3个字节
YUV 4:4:4采样
YUV 4:2:2采样:每两个Y共用一组UV分量;一个像素占用两个字节
YUV 4:2:2采样
YUV 4:2:0采样:每四个Y共用一组UV分量;每个像素点占用1.5个字节空间
YUV 4:2:0采样
- YUV格式数据存储方式:
- planar(打包格式):先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。(YYYYUUVV)
- packed(平面格式):每个像素点的Y,U,V是连续交叉存储的。(YUVYUVYUVYUV)
- semi-planar(半平面格式):先连续存储所有像素点的 Y,紧接着连续交叉存储所有像素点的U,V(YYYYUV)
- YUV420格式又可以细分为YUV420P和YUV420SP两种类型。
YUV420P是三平面存储,Y、U、V三个分量分别占用一个平面。数据的排列方式有I420,YV12:
YU12 (I420),YYYYYYYY UUVV
YV12,YYYYYYYY VVUU
- YUV420SP是两平面存储,Y分量占用一个平面,UV分量公用一个平面。有两种排列方式NV12、NV21:
NV12,YYYYYYYY UVUV
NV21,YYYYYYYY VUVU
- NV21:目前只有Android摄像头产生的数据是这个格式
- yuv411 表示 4 比 1 比 1 的 yuv 取样,水平每 4 个像素(即 4x1 的 4 个像素)中 y 取样 4 个,u 取样 1 个,v 取样 1 个
-
yuv420 表示 4 比 2 比 0 的 yuv 取样,水平每 2 个像素与垂直每 2 个像素(即 2x2 的 2 个像素)中 y 取样 4 个,u 取样 1 个,v 取样 1 个
I420
三、RGB简介
-
RGB:当前主流的标准表示方法,用于交换真彩色和 JPEG 或者 TIFF 等图像文件格式里的通用颜色。它可以产生一千六百万种颜色组合,对人类的眼睛来说,其中有许多颜色已经无法确切地分辨了。RGB 常见的展现方式分为 16 位模式和 32 位模式(32 位模式中主要用其中 24 位来表示 RGB)。16 位模式(RGB565、BGR565、ARGB1555、ABGR1555)分配给每种原色各为 5 位,其中绿色为 6 位,因为人眼对绿色分辨的色调更敏感。但某些情况下每种原色各占 5 位,余下的 1 位不使用或者表示 Alpha 通道透明度。32 位模式(ARGB8888),实际就是 24 位模式,余下的 8 位不分配到象素中,这种模式是为了提高数据处理的速度。同样在一些特殊情况下,在有些设备中或者图像色彩处理内存中,余下的 8 位用来表示象素的透明度(Alpha 通道透明度)。
RGB
参考:
- 一文读懂 YUV 的采样与格式:https://cloud.tencent.com/developer/article/1442041?areaSource=&traceId=
- YUV_420_888介绍及YUV420转RGBA: https://www.jianshu.com/p/944ede616261