移动端视频进阶(二):YUV数据编码格式的总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aiynmimi/article/details/88895788

前言

在上一篇文章中,总结了移动平台摄像头获取视频预览数据的各种格式,包括32BGRANV21,还有Android5.0之后统一的YUV_420_888,那么其实对于RGB格式的数据,我们还是比较容易理解的,对于YUV格式的数据,可能不是太清楚,这里就简单总结一下!

简介

这里参考wikipedia的内容

YUV是一种颜色编码系统,通常用作彩色图像流水线的一部分。它编码一个彩色图像或视频拍摄人类感知考虑在内,从而允许减少的带宽用于色度分量,从而使通常的传输错误或压缩伪像被更有效地由人类感知。
术语Y’UV,YUV,YCbCr,YPbPr等的范围有时是模糊和重叠的。历史上,术语YUV和Y’UV用于电视系统中的颜色信息的特定模拟编码,而YCbCr用于适合于视频和静止图像压缩和传输的颜色信息的数字编码,例如MPEG和JPEG。今天,术语YUV通常用于计算机行业,以描述使用YCbCr编码的文件格式。
Y’代表luma分量(亮度),U和V代表chrominance(颜色)分量; luminance用Y表示,luma用Y’表示 - 素数符号(’)表示伽马压缩,“luminance”表示物理线性空间亮度,而“luma”表示(非线性)感知亮度。

下图为UV颜色平面的示例,Y’值= 0.5,在RGB色域内表示
在这里插入图片描述

如果单独输出各个分量,如下图所示(从上往下为原图,Y’分量,U分量,V分量):
在这里插入图片描述

还有一点需要注意它和Y’CrCb还是有一些区别的:
Y’UV通常用作YCbCr的术语。然而,虽然相关,但它们是具有不同比例因子的不同格式。最主要的区别在于Y’CbCr用于数字图像领域,YUV用于模拟信号领域。
Y’为亮度,Cb、Cr分量代表当前颜色对蓝色和红色的偏移程度。

下图为恒定亮度的CbCr平面示例,Y’= 0.5
在这里插入图片描述
上边就是一些概念上的东西了,YUV和YCbCr虽然有些区别,但是对于在前边博客中说到的,比如iOS中的kCVPixelFormatType_420YpCbCr8BiPlanarFullRange,Android中的ImageFormat.NV21或者ImageFormat.YUV_420_888,其实说白了是一样的,我们在这里不用过于纠结这个!或者说这里YUV就是特指的YCbCr

YUV的存储方式和采样方式

存储方式

YUV存储方式有两种:planarpacked

  • 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
  • 对于packed的YUV格式,每个像素点的Y,U,V是连续交叉存储的。类似RGB。

采样方式

YUV格式的编码,Y是全量采样,根据U和V采样数目的不同,分为YUV444,YUV422YUV420等。其中YUV420是移动端中最常用的一种采样

关于采样方式:这篇文章里写的很好:YUV颜色编码解析,这里引用一下!

色度抽样方式用J:A:B表示
J:最小水平抽样的的宽度,一般为4
A:最小水平抽样区域第一行的色度抽样
B:最小水平抽样区域第二行的色度抽样
在这里插入图片描述

这里说的是什么意思呢?就是说每4个像素,Y采样几次,U采样几次,V采样几次,不过这里4:2:0需要注意,这里并不是只抽取U,而不抽取V,而是U和V间隔抽取,比如第一行抽取U,第二行抽取V,第三行抽取U,第四行抽取V…,所以:
YUV 4:4:4采样,每一个Y对应一组UV分量,一个YUV(像素)占8+8+8 = 24bits = 3bytes。
YUV 4:2:2采样,每两个Y共用一组UV分量,一个YUV(像素)占8+4+4 = 16bits = 2bytes。
YUV 4:2:0采样,每四个Y共用一组UV分量,一个YUV(像素)占8+2+2 = 12bits = 1.5bytes。

移动端的YUV420

那么知道了上边YUV的存储和采样,我们下边来详细了解一下移动端中最常用的YUV420格式。

iOS

在前边一章节中,我们知道iOS可以设置的格式有kCVPixelFormatType_420YpCbCr8BiPlanarFullRangekCVPixelFormatType_420YpCbCr8BiPlanarVideoRange,这两种统称为NV12格式!
又因为它是BiPlanar,所以是半平面semi-planar,属于YUV420SP的一种,即分为Y和UV两个planar
它的存储顺序是先存Y值,再UV交替存储,所以它的存储数组序列为:YYYYYYYYUVUV

Android

  • NV21
    对于Camera预览回调的默认为NV21格式,同样的属于YUV420SP,只不过它和NV12相反,它的存储顺序是先存Y值,再VU交替存储,所以它的存储数组序列为:YYYYYYYYVUVU

  • YV12,YU12
    两者都属于YUV420P,其中YU12又称为I420Y , U , V分别在不同平面,也就是有三个平面

    ①对于YU12,首先是所有Y值,然后是所有U值,最后是所有V值。所以它的存储数组序列为YYYYYYYYUUVV

    ②对于YV12,首先是所有Y值,然后是所有V值,最后是所有U值。所以它的存储数组序列为YYYYYYYYVVUU

参考文章

YUV颜色编码解析
对颜色空间YUV、RGB的理解
图解YU12、I420、YV12、NV12、NV21、YUV420P、YUV420SP、YUV422P、YUV444P的区别
YUV格式详解

猜你喜欢

转载自blog.csdn.net/aiynmimi/article/details/88895788