导图社区 YUV格式
“YUV(Y'CbCr)是一种像素格式,常见于视频编码与静态图像。与RGB格式(红-绿-蓝)相反,YUV 分别由一个称为Y(相当于灰度)的“亮度”分量(Luminance or Luma)和两个称为U(蓝色投影Cb)和V(红色投影Cr)的“色度”分量(Chrominance or Chroma)表示,由此得名
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
YUV格式
概念
YUV,是一种颜色编码方法。常使用在各个影像处理组件中。 YUV在对照片或影片编码时,考虑到人类的感知能力,允许降低色度的带宽。
YUV,分为三个分量:
YUV,分为三个分量: Y表示明亮度(Luminance或Luma),也就是灰度值; U(Cb)表示色度(Chrominance) V(Cr)表示浓度(Chroma) 通常UV一起描述影像色彩和饱和度,用于指定像素的颜色。 对于 YUV 图像来说,并不是每个像素点都需要包含了 Y、U、V 三个分量,根据不同的采样格式,可以每个 Y 分量都对应自己的 UV 分量,也可以几个 Y 分量共用 UV 分量。
Y表示明亮度(Luminance或Luma),也就是灰度值;
U(Cb)表示色度(Chrominance)
V(Cr)表示浓度(Chroma)
YUV采样方式
YUV 4:4:4采样,每一个Y对应一组UV分量。 YUV 4:2:2采样,每两个Y共用一组UV分量。 YUV 4:2:0采样,每四个Y共用一组UV分量。
一张 1280 * 720 大小的图片,在 YUV 4:4:4 采样时的大小为:
(1280*720*8 + 1280*720*8 + 1280*720*8)/8/1024/1024 = 2.64 MB
一张 1280 * 720 大小的图片,在 YUV 4:2:2 采样时的大小为:
(1280*720*8 + (1280*720)/2*8 + (1280*720)/2*8)/8/1024/1024 = 1.76 MB
一张 1280 * 720 大小的图片,在 YUV 4:2:0 采样时的大小为:
(1280*720*8 + (1280*720)/4*8 + (1280*720)/4*8)/8/1024/1024 = 1.32 MB
YUV存储格式
packed(打包格式):每个像素点的 Y,U,V 是连续交叉存储的(YUVYUVYUVYUV) planar(平面格式):先连续存储所有像素点的 Y,紧接着存储所有像素点的 U,随后是所有像素点的V(YYYYUUVV) semi-planar(半平面格式):先连续存储所有像素点的 Y,紧接着连续交叉存储所有像素点的U,V(YYYYUV)
packed,打包格式,每个像素点的Y,U,V是连续交错存储的,所有数据都存在data[0]中。
planar,平面格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,然后是所有像素点的V;将几个分量分开存,比如YUV420中,data[0]专门存Y,data[1]专门存U,data[2]专门存V
多种 YUV 格式
根据采样方式和存储格式的不同,就有了多种 YUV 格式。这些格式主要是基于 YUV 4:2:2 和 YUV 4:2:0 采样。
例子一:YUV422格式
# NV16、NV61 的存储格式为 Y 平面,UV 打包一个平面,共两个平面,即:先连续存储 Y,然后连续交叉存储 UV # 不同点在于 UV 的排列顺序,SP 为 Semi-Planar 的缩写 # NV16:先是 w * h 长度的 Y,后面跟 w * h 长度的 UV(交叉存储),总长度为 w * h * 2 # NV61:先是 w * h 长度的 Y,后面跟 w * h 长度的 VU(交叉存储),总长度为 w * h * 2 NV16: YYYYYYYY UVUVUVUV => YUV422SP NV61: YYYYYYYY VUVUVUVU => YUV422SP # I422、YV16 三个分量均为平面格式,共三个平面,即:先连续存储 Y,然后连续存储 U,最后连续存储 V # 不同点在于 U V 的排列顺序,P 为 Planar 的缩写 # I420:先是 w * h 长度的 Y,后面跟 w * h * 0.5 长度的 U, 最后是 w * h * 0.5 长度的 V,总长度为 w * h * 2 # YV12:先是 w * h 长度的 Y,后面跟 w * h * 0.5 长度的 V, 最后是 w * h * 0.5 长度的 U,总长度为 w * h * 2 I422: YYYYYYYY UUUU VVVV => YUV422P YV16: YYYYYYYY VVVV UUUU => YUV422P # YUVY、VYUY、UYVY 为打包格式:每个像素点的 Y,U,V 是连续交叉存储 # YUVY:在 Packed 内部,YUV 的排列顺序是 YUVY,两个 Y 共用一组 UV # VYUY:在 Packed 内部,YUV 的排列顺序是 VYUY,两个 Y 共用一组 UV # UYVY:在 Packed 内部,YUV 的排列顺序是 UYVY,两个 Y 共用一组 UV YUVY: YUVY YUVY YUVY YUVY => YUV422 VYUY: VYUY VYUY VYUY VYUY => YUV422 UYVY: UYVY UYVY UYVY UYVY => YUV422
Planar 平面模式
I422: YYYYYYYY UUUU VVVV => YUV422P
YV16: YYYYYYYY VVVV UUUU => YUV422P
Packed 打包模式
YUVY: YUVY YUVY YUVY YUVY => YUV422
VYUY: VYUY VYUY VYUY VYUY => YUV422
UYVY: UYVY UYVY UYVY UYVY => YUV422
例子二:YUV420格式(重点)

YUV 420P
YU12,又叫 I420
先存 Y 分量,再存 U分量,最后V分量
Android 平台常用
YV12
先存 Y 分量,再存 V 分量,最后U分量
YUV 420SP
NV12
先存 Y 分量,再 UV 进行交替存储
iOS 平台常用
NV21
先存 Y 分量,再 VU 进行交替存储