YUV 颜色编码格式

背景

音视频、直播、短视频等图像处理过程中涉及到 YUV 信息,在维基百科阅读 YUV 协议、编写代码实现、输出可用的 API 模块之后,记录问题和解决方案,便于后续应用类似思想解决问题

是什么

  • 一种颜色编码方法
  • 记录颜色信息的一种数据结构,颜色的编码方法有多种(RGB, YUV, CMYK),它是其中一种。最常见的是 RGB
  • Y 明亮度,U 色度,V 浓度,UV 彩色
  • 一个像素点包含一个 YUV 信息
  • 计算机需要解决时间和空间问题,YUV 属于解决空间问题范畴,因此需要重点关注它如何解决问题的

为什么

  • 解决黑白电视和彩色电视的图像兼容性问题
  • 解决图像信息在传输过程中占用过大的带宽问题
  • 解决图像信息在存储过程中占有空间过大的问题
  • 服务器将同一段数据分发给黑白和彩色电视,它们可以根据需要把一帧 YUV 图像解码成 RGB 渲染

使用方法

  • 在传输之前把颜色编码成 YUV 格式,降低带宽占用和减少流量消耗
  • 在接收到 YUV 格式之后解码成 RGB 格式,用于后续渲染

内部原理

紧凑 / 平面格式

  • 紧凑型
    在像素点字节流里面 YUV 三个分量紧紧挨着,如 YUV YUV YUV YUV,这种排列方式跟 RGB 很类似
  • 平面型
    在像素字节流里面 YUV 三个分量分开存储,同一分量存储在一起,如 YYYY YYYY UU VV
    这两种设计方式和对象中信息记录方式类似,如多个对象依次排列称为紧凑型,把多个对象中同一维度的信息拿出来用数组记录,多个数组连在一起称为平面型

采样格式

  • YUV444
    • 每个像素点都采样单独的 YUV 分量信息
    • 一个像素点占用 3 字节,每个分量占 1 字节。一帧图像占用总空间 W * H * 3 bytes
    • 包含了最全面的 YUV 信息,是 YUV 空间内部转换以及和 RGB 空间转换的桥梁
  • YUV422
    • 在 YUV444 编码的基础上采用 2 * 1 的矩阵进行二次取样,也就是在水平方向上隔一列采样一次 UV 信息,在垂直方向上进行完全取样
  • YUV420
    解决 YUV444 占用空间过大问题。在 YUV444 格式的基础上使用 2 * 2 矩阵对像素点进行二次取样(只取左上角像素点,其他不取,还是取四个之后平均?),4 个像素点具有单独 Y 分量且共享同一个 UV 信息,总 6 字节。一帧图像占用总空间 (W * H + W * H / 2) bytes,比 YUV444 少一半空间。
    • I420
      字节排列 YYYY YYYY UU VV,全部都是平面型排列
    • NV21
      字节排列 YYYY YYYY UV UV,Y 平面和 UV 平面, UV 内部是紧凑型
    • YV12
      字节排列 YYYY YYYY VV UU,平面型,V 在 U 前面

优缺点

  • 兼容黑白和彩色电视
  • 占用空间少,带宽要求低

练习题

  • 完成单个像素点 YUV 和 RGB 颜色空间转换 API
  • 完成一帧图像 YUV 和 RGB 颜色转换 API,关键在于计算 U/V 变量在字节流中的偏移量
  • 完成 NV21、YV12、I420 到 RGB888 的编解码
  • 完成和别人编解码 API 的相互转换,验证编解码正确

总结

  • 通过对比 RGB 和对象多维度信息存储,理解 YUV 如何解决信息兼容和空间占用的问题
  • 实战单个像素、一帧图像的多种格式之间编解码,理解了 YUV 背后在干一件什么事情
  • 图像的编解码也没有那么高不可攀
  • 通过学习协议、编码实现、输出可用 API 、整理输出博客这样的学习方法学得会更加扎实

后记

到现在的时间点我们完成了一帧图像的编码,输出数据结构是 YUV 。YUV420 相对于 ARGB8888 模式节省空间 (4-1.5)/ 4 = 62.5%.下一步是多帧图像组成视频时的编码优化空间,也就是 H.264 视频编码原理,敬请期待

参考

维基百科

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

推荐阅读更多精彩内容

  • 由于H.264等压缩算法都是在YUV的颜色空间上进行的,所有在进行压缩前,首先要进行颜色空间的转换。如果摄像头采集...
    眷卿三世阅读 13,504评论 2 6
  • 转自:http://www.cnblogs.com/azraelly/archive/2013/01/01/284...
    rickytang0阅读 856评论 0 1
  • 1)YUV简介 YUV格式有两大类:planar和packed。 对于planar的YUV格式,先连续存储所有像素...
    片片碎阅读 38,902评论 9 33
  • 1.1、iOS11新增版本判断API iOS11版本现在有了简单的API,OC也开始支持swfit的@availa...
    面条168阅读 429评论 0 1
  • 在你的心中,最理想的伴侣是什么模样呢? 从来不跟你争吵的新“三好”对象?还是可以依靠可以信赖的人生导师? 大概,不...
    兹布拉阅读 835评论 0 0