YUV

前言

        最近在学习一个开源算法库:libyuv。看到这个名字的时候我很懵逼,“lib”自然是静态链接库的意思,那么“yuv”又是个什么鬼东西?

    在本文中你将会看到以下内容:

    1、YUV 的含义及历史

    2、YUV 的格式及数据存储

    3、YUV 与 RBG 的关系

    4、本文参考资料

YUV 的含义及历史

        在我最初看《计算机程序设计艺术》的时候很不理解为什么高德纳要在开始花费大量力气去探究 "Algorithm" 一词的由来。现在我有点明白了,当人们第一次接触一个概念时,总是竭力想要在脑海中构建一个相关的模型。比如我说“苹果”的时候,你脑海中会浮现一个苹果的样子;当我说“RGB”的时候,你脑海中很快会浮现红、绿、蓝三原色。这样你就能很快明白我要讲的是什么概念。那么,如果我说“埃弗顿”,你知道我要说什么吗?实际上我自己都不知道“埃弗顿”是什么意思,因为这三个字是我随便敲击的 :)

        所以为了弄明白“YUV”是什么,我必须知道“YUV”这三个字母组合的由来。

        首先是度娘给的答案:

图片截自百度百科

        之后在英文缩写网上查到:

英文缩写网关于“YUV”词条

        最后结合libyuv开源项目指导文档:

内容来自https://github.com/lemenkov/libyuv README.md  

我终于明白了我纠结的“YUV”到底是什么了:一种颜色编码方法!

        那么为什么需要这种编码方式呢?

        YUV的发明是在彩色电视与黑白电视的过渡时期。黑白视频只有Y(Luma,Luminance)视频,也就是灰阶值。到了彩色电视规格的制定,是以YUV/YIQ的格式来处理彩色电视图像,把UV视作表示彩度的C(Chrominance或Chroma),如果忽略C信号,那么剩下的Y(Luma)信号就跟之前的黑白电视频号相同,这样一来便解决彩色电视机与黑白电视机的兼容问题。

        好吧,总结一下:

        Y:表示颜色的明亮度,即灰阶值

    U/V:表示颜色的亮度,其中U是蓝色分量,V是红色分量

   YUV:共同描述了一个点的颜色,和RGB类似。

        所以,YUV不是我以为的“三个单词的首字母缩写”!

        YUV又被叫做 YCbCr,这里的‘Y’仍然表示亮度或灰度(luminance),‘Cb’表示"blue"部分去掉亮度的色度(Chrominance或Chroma)分量, ‘Cr’表示"red"部分去掉亮度的色度分量。

YUV 的格式及数据存储

        YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV 4:4:4,YUV 4:2:2,YUV 4:2:0。我们需要根据其采样格式来从码流中还原每个像素点的YUV值,因为只有正确地还原了每个像素点的YUV值,才能通过YUV与RGB的转换公式提取出每个像素点的RGB值,然后显示出来。

        我们用三张图来解释YUV的三种采样方式,黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量:

常用的三种yuv采样图解

        很容易看出来:

        YUV 4:4:4 采样是对每个像素点都进行Y、UV分量采样;每一个Y对应一个UV分量。

        YUV 4:2:2 采样是在行 或 列进行Y分量全采,每两个Y分量取一UV分量;每两个Y分量对应一个UV分量。例如图中的A、B像素共用一个UV分量。

        YUV 4:2:0 采样是在行 及 列进行Y分量全采,每两个Y分量取一UV分量;这样每4个Y分量对应一个UV分量。例如图中的C、D、E、F像素共用一个UV分量。

        我们知道YUV的采样方式了,那么YUV数据在内存中是怎么存储呢?这里需要先了解两个概念:planar、packed。

        YUV planar(平面) 格式:先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。

        YUV two-planar 格式:先连续存储所有像素点的Y,紧接着存储所有像素点的UV。

        YUV packed(打包) 格式:连续存储所有像素点的 YUV。

YUV的数据存储格式

        结合采样方式以及数据存储格式,会有跟多YUV格式,这里简单列举几个YUV格式:

        约定:下诉大小针对 m * n 的图片,其中 m 表示图片的高,m表示图片的宽,单位像素。

                    size、sizeY、sizeU、sizeV 分别表示整幅图片、Y、U、V分量占用的内存大小,单位字节。

1、AYUV

        采样方式:4:4:4        存储格式:packed        补充:A表示 Alpha

AYUV存储图解

        size = m * n * 4;    sizeA = sizeY = sizeU = sizeV = m * n

2、YUYV

        采样方式:4:2:2

YUYV 存储图解

        size = m * n * 3 / 2;    sizeY = m * n;    sizeU = sizeV = m * n / 2

3、UYVY

        采样方式:4:2:2

UYVY存储图解

        size = m * n * 3 / 2;    sizeY = m * n;    sizeU = sizeV = m * n / 2

        是的,你没有看错,UYVY 与 YUYV 区别只是UV的排列顺序不一样。

4、YUV422P

        采样方式:4:2:2        存储格式:planar

YUV422P存储图解

        size = m * n * 3 / 2;    sizeY = m * n;    sizeU = sizeV = m * n / 2

5、YV12,YU12

        采样方式:4:2:0        存储格式:planar


YV12,YU12存储图解

        size = m * n * 5 / 4;    sizeY = m * n;    sizeU = sizeV = m * n / 4

6、NV12、NV21

        采样方式:4:2:0        存储格式: two-planar

NV12、NV21存储图解

        size = m * n * 5 / 4;    sizeY = m * n;    sizeU = sizeV = m * n / 4

        Camera 返回的YUV数据一般是NV21和YV12两种。

        Camera 返回的YUV数据一般是NV21和YV12两种。

        Camera 返回的YUV数据一般是NV21和YV12两种。

YUV 与 RBG 的关系

        对RGB,我们并不陌生,从初中开始接触的色光的三原色,告诉我们我们可以看到的光可以由这三种颜色按一定的比例去混合得到;RGB 模型是目前常用的一种彩色信息表达方式,它使用红、绿、蓝三原色的亮度来定量表示颜色。该模型也称为加色混色模型,是以RGB三色光互相叠加来实现混色的方法,因而适合于显示器等发光体的显示。

        而YUV则是根据人眼的视觉特点提出的模型:人眼对亮度更敏感,对位置、色彩相对来说不敏感。

        既然RGB、YUV都是对颜色的建模、编码处理,那么他们之间能不能相互转换呢?别急先来看张图:

CbCr (UV)坐标下的颜色空间

当我们改变 Y(亮度)值会发生什么变化呢?且看:

不同Y值下的 CbCr(UV)颜色空间

        这里列一个YUV与RGB的换算公式:


        实际上更具不同的标准,YUV和RGB之间的转换会有所不同,更详细请看参考质料《YUV与RGB互转各种公式》

本文参考质料:

《YUV介绍》

《YUV格式到底是什么?》

《对颜色空间YUV、RGB的理解》

《YUV与RGB互转各种公式》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351