YUV各种采样格式的说明

通常我们用RGB表示一种彩色。计算机系统里的LCD显示的数据就是RGB来表示每个像素的颜色。
而在我们生活里,有黑白电视机与彩色电视机两种,拍摄节目源时不可以用两种不同的摄像机来存放两种图像数据。
所以为了兼容两种电视机,专家就引入YUV格式代替RGB,其中Y表示亮度, U和V表示色差。 黑白电视机只用Y信号, 而彩色电视机可由YUV转换成RGB再显示颜色。

通常我们所用的YUV格式是 ITU-R 的标准 , 也叫YCbCr.

YUV是由RGB格式的数据转换得来。

Y    Y = 0.299 x R + 0.587 x G + 0.114 x B + 0
U    Cb = -0.169 x R - 0.331 x G + 0.499 x B + 128
V    Cr = 0.499 x R - 0.418 x G - 0.0813 x B + 128 Y    Y = 0.299 x R + 0.587 x G + 0.114 x B + 0
U    Cb = -0.169 x R - 0.331 x G + 0.499 x B + 128
V    Cr = 0.499 x R - 0.418 x G - 0.0813 x B + 128 

///
YUV4:4:4 
其实就是YUV的数据各占用8位, 每个像素都由YUV组成

同一行的相邻4个像素数据:   Y0U0V0    Y1U1V1   Y2U2V2  Y3U3V3存储时:    Y0U0V0    Y1U1V1   Y2U2V2  Y3U3V3  //即每个像素YUV的数据都会存放起来
为什么叫4:4:4 , 意思就是4个像素里的数据有4个Y, 4个U, 4个V

//
YUV4:2:2
其实绝大部分相邻的两个像素,数据差异应不大。所以为了节点空间便于存储,丢失每个像素的部分数据。
专家研究表明我们人对亮度比较敏感,而对色彩不怎么敏感。所以每个像素的亮度Y数据是绝对不动的,而色差数据可以进行丢弃。

同一行的相邻4个像素数据:   Y0U0V0    Y1U1V1   Y2U2V2  Y3U3V3存储时:   Y0U0      Y1V1    Y2U2   Y3V3  // 每两个相邻的像素, 一个丢弃V数据,一个丢弃U数据
为什么叫4:2:2,  意思就是相邻的4个像素里有4个Y, 2个U, 2个V。 按上面存储的顺序也叫YUYV.但还原成RGB数据必须需要YUV, 像第一个像素只有Y0U0是没法还原的,这时只能用下一像素的V1数据。还原时的YUV:  [Y0U0V1] [Y1U0V1] [Y2U2V3] [Y3U2V3]  // 这样还原理论上会对图像的质量有影响的,但我们看不出来的.

/
YUV4:2:0
专家们进一步研究表示,每一行的相邻两个像素与下一行同位置的两个像素数据差异不大,可以进一步的丢数据。

如两行的像素数据:Y00U00V00   Y01U01V01   Y02U02V02   Y03U03V03  ....  Y88U88V88   Y89U89V89   Y90U90V90   Y91U91V91  ....存储时:    Y00U00    Y01      Y02U02    Y03    // 每个像素的Y数据保留, 两个像素数据只保留一个U数据。这一行不保留V数据(YUV:  420)Y88V88    Y89      Y90V90    Y91    // ....  两个像素数据只保留一个V数据, 这行不保留U数据(YUV:  402)

还原时只能相同位置的上下两行4个像素结合还原:Y00U00V88  Y01U00V88  Y02U02V90  Y03U02V90Y88U00V88  Y89U00V88  Y90U02V90  Y91U02V90

YUV各种采样格式的比较

我们以一张大小为1280*720的图像为例:
在RGB 图像中,每个像素点都有红、绿、蓝三个原色,其中每种原色都占用 8 bit,也就是一个字节,那么一个像素点也就占用 24 bit,也就是三个字节。
一张 1280 * 720 大小的图片,就占用 1280 * 720 * 3 / 1024 / 1024 = 2.63 MB 存储空间。

【使用YUV4:4:4格式采样的大小】
YUV4:4:4格式意味着Y、U、V三个分量的采集比例相同,因此在生成的图像里,每个像素的三个分量信息完整,都是8bit,也就是一个字节。
那么它的采样大小为
3 * 1280 * 720 / 1024 / 1024 = 2.63MB
与原始RGB图像相比大小是一样的。

【使用YUV4:2:2格式采样的大小】
YUV4:2:2格式的采样特征是在每相临的两个像素,一个丢弃U分量,一个丢弃V分量,那么它的采样大小为:
(8 + 8) * 1280 * 720 / 8 / 1024 / 1024 = 1.76MB
可以看到 YUV 4:2:2 采样的图像比 RGB 模型图像节省了三分之一的存储空间,在传输时占用的带宽也会随之减少。

【使用YUV4:2:0格式采样的大小】
YUV4:2:0格式的采样特征是所有像素都保留Y分量,同一行的像素只保留U分量,或者是V分量,同一行中相临的两个像素只保留同一个Y分量或者U分量。
那么它的采样大小为:
(8 * 1280 * 720 + 8 * 1280 * 720 / 2 / 2 + 8 * 1280 * 720 / 2 / 2) / 8 / 1024 / 1024 = 1.32MB
可以看到 YUV 4:2:0 采样的图像比 RGB 模型图像节省了一半的存储空间,因此它也是比较主流的采样方式。

参考链接:

1.一文读懂 YUV 的采样与格式

2.最简单解释 YUV444,YUV422,YUV420中的4,2,0

转载于:https://www.cnblogs.com/yongdaimi/p/10647005.html

音视频编解码: YUV采样格式中的YUV444,YUV422,YUV420理解相关推荐

  1. 必须要知道的多媒体知识-音视频编解码-h265、h264-直播-点播

    多媒体知识 文章目录 多媒体知识 音视频编解码 音频编码 视频编码 解码 编解码关键 什么是码率? 码率 码率计算公式 几点原则 什么是帧率? 帧率 h264和h265是什么? 常见的编码方式 h26 ...

  2. Android 8.1 如何查看系统支持哪些音视频编解码格式

    代码路径: frameworks/av/media/libstagefright/omx/SoftOMXPlugin.cpp 在SoftOMXPlugin.cpp文件中kComponents[]结构体 ...

  3. WebRTC 中收集音视频编解码能力

    在 WebRTC 中,交互的两端在建立连接过程中,需要通过 ICE 协议,交换各自的音视频编解码能力,如编解码器和编解码器的一些参数配置,并协商出一组配置和参数,用于后续的音视频传输过程. 对于音频, ...

  4. 各种音视频编解码学习详解之 编解码学习笔记(三):Mpeg系列——Mpeg 1和Mpeg 2

    最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解很多小的篇幅,方便阅读.大神博客传送门: ...

  5. 音视频编解码学习详解

    音视频编解码学习详解 目录(?)[+] 编解码学习笔记二codec类型 编解码学习笔记三Mpeg系列Mpeg 1和Mpeg 2 编解码学习笔记四Mpeg系列Mpeg 4 编解码学习笔记五Mpeg系列A ...

  6. 音视频编解码知识学习详解(分多部分进行详细分析)

    1. 常用的基本知识 基本概念 编解码 编解码器(codec)指的是一个能够对一个信号或者一个数据流进行变换的设备或者程序.这里指的变换既包括将信号或者数据流进行编码(通常是为了传输.存储或者加密)或 ...

  7. 音视频编解码基础知识(1)- 音视频编解码过程

    在学习音视频编解码知识时,首先要对整个过程有一个直观的认识,对一些知识点也要有明确的认识. 知识点: 1. YUV/RGB/RAW,这是三种视频采集的数据格式 2. 视频编码格式:H.264(在MPE ...

  8. 基于FFmpeg 实现RTSP, 音视频编解码,视频流添加文字,音视频合成MP4

    前言: 最近闲这没事,整理了一下之前开发过的音视频编解码库,主要基于ffmpeg,实现音视频的编解码.视频流添加文字,音视频同步到MP4等功能.有需要的小伙伴可以参考参考,如果写的有什么不对的地方,欢 ...

  9. 各种音视频编解码学习详解之 编解码学习笔记(十三):容器

    最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...

最新文章

  1. 嵌入式和机械哪个好?机械转嵌入式好转吗?
  2. t7910安装linux体会_linux心得体会范文
  3. 误操作导致系统只剩下lo
  4. h5启动原生APP总结
  5. 【Lolttery】项目开发日志 (三)维护好一个项目好难
  6. python语言sort_Python里的sort语句
  7. java disposable_rx-java – RxJava中的CompositeDisposable是什么
  8. Spring解决循环依赖
  9. DNA序列 LOJ NOIP模拟赛 D1T1 字符串哈希
  10. 计算机教案解说词,小学微机室解说词初稿
  11. 4月24 利用shell脚本添加环境变量
  12. 想给视频去色并加马赛克就用它
  13. java 数据库容灾_mysql 容灾备份
  14. 钓鱼网站制作Kali
  15. 刑法285.286.287 条
  16. Apple Watch简述
  17. python量化交易策略实例_Python写一个量化股票提醒系统实例
  18. 4-2. 打印九九口诀表
  19. linux 隧道服务器,如何在两台CentOS 7服务器之间建立GRE隧道
  20. 聊聊程序员的 3 个烦恼

热门文章

  1. 201671010436 王雪刚 实验四 《英文文本统计分析》结对项目报告
  2. php 静态方法和非静态方法的调用说明
  3. jexus防止产生 *.core文件
  4. C#异步编程的实现方式(4)——Task任务
  5. c#编码规范【转载】
  6. Kotlin学习入门笔记
  7. 【转】Linux查看物理CPU个数、核数、逻辑CPU个数
  8. 一张表按分类查询:只显示前2行
  9. Jenkins TFS配置
  10. 安装RRDtool 1.4.5