zoukankan      html  css  js  c++  java
  • 音视频编解码——RGB与YUV格式转换

    一.RGB模型与YUV模型

    1.RGB模型

    我们知道物理三基色分别是红(Red)、绿(Green)、蓝(Blue)。现代的显示器技术就是通过组合不同强度的红绿蓝三原色,来达成几乎任何一种可见光的颜色。在图像储存中,通过记录每个像素的红绿蓝强度,来记录图像的方法,称为RGB模型 (RGB Model)。常见的图片格式中,PNG和BMP这两种就是基于RGB模型的。

    2.YUV模型

    除了RGB模型外,还有一种广泛采用的模型,称为YUV模型,又被称为亮度-色度模型(Luma-ChromaModel)。它是通过数学转换,将RGB三通道转换为一个代表亮度的通道(Y,又称为Luma),和两个代表色度的通道(UV,并称为Chroma)来记录图像的模型。

    二.RGB与YUV之间的转换

    1.为何要进行RGB与YUV之间的转换

    我们实际传输的信号为YUV信号,而不是RGB信号,那么为什么要进行RGB与YUV之间的转换呢,这主要是考虑了以下几个方面:

    a.为了与黑白电视系统兼容,因为在黑白电视系统中只需要传输亮度信号Y即可,而不需要传输色度信号;

    b.转换成YUV信号可以节省信号的带宽;

    c.恒定亮度原理告诉我们在传输过程中,若色差信号受到干扰,在最后还原三基色时,不会影响亮度;

    d.混合高频原理告诉我们利用人眼对彩色细节分辨力较低的这一特点,在图像的高频部分中我们只需要传输亮度信号,而不必传送色度信号。

    此外,现在基本所有的显示器都是通过组合RGB三原色来重现图像的,所以在显示端也必须将YUV信号转换成RGB信号,这就是我们要进行RGB信号与YUV信号相互转换的原因。

    2.转换过程

    • RGB2YUV:
      在做RGB信号到YUV信号的转换时,一般是先转换到YUV444格式(参见色度信号取样格式),然后再将UV信号的分辨率降低,变成我们所需的格式。
    • YUV2RGB:
      在播放视频或显示图像的时候,我们需要将YUV信号转换为RGB信号。这个步骤称为渲染(Rendering)。
      在做YUV到RGB的转换时,首先需要将缩水的UV信号的分辨率拉升到与Y信号相同的分辨率,然后再转换到RGB信号。

    三.RGB与YUV之间的转换实现

    1. 推荐的开源项目

    2. 谷歌提供的开源项目

    • Google提供了一套Image处理的开源库:libyuv

    四、 参考资料

  • 相关阅读:
    [POJ1724]ROADS
    表达式求值
    [NOIp2017提高组]奶酪(BFS)
    [NOIp2012提高组]Vigenère 密码
    [NOIp2012提高组]国王游戏
    [POJ1321]棋盘问题
    [POJ3009]Curling2.0
    垃圾陷阱
    2019CSP day1t2 括号树
    2019CSP游记
  • 原文地址:https://www.cnblogs.com/renhui/p/8482648.html
Copyright © 2011-2022 走看看