音视频学习(二十九):YUV与RGB

YUV 和 RGB 是两种不同的颜色表示方式,主要用于图像和视频处理。

1. RGB 颜色空间

RGB(Red, Green, Blue)是基于加色原理的颜色空间,每种颜色由红、绿、蓝三种基本色按不同的比例混合得到,常用于显示设备(如电脑显示器、手机屏幕)。

  • 每个通道通常使用 8 位(0-255),因此一个像素占 3 × 8 = 24 位(RGB24)。
  • 适用于计算机图形处理,但不太适合视频压缩和传输。

2. YUV 颜色空间

YUV 是一种亮度(Luminance, Y)和色度(Chrominance, U/V)分离的颜色表示方法,常用于视频编解码、电视广播等领域。

  • Y(亮度分量): 表示图像的明暗信息,即灰度信息。
  • U(蓝色色差分量): 反映蓝色分量相对于亮度的偏差(U = B - Y)。
  • V(红色色差分量): 反映红色分量相对于亮度的偏差(V = R - Y)。

YUV 的优势:

  • 人眼对亮度敏感,对色度不敏感,所以可以降低 U/V 采样率,提高压缩效率(如 4:2:0)。
  • 适用于视频压缩格式,如 MPEG、H.264、VP9 等。

3. RGB 与 YUV 的转换公式

  • RGB 转换为 YUV(BT.601 标准):

c++代码实现:

c++ 复制代码
void RGBtoYUV(uint8_t r, uint8_t g, uint8_t b, uint8_t &y, uint8_t &u, uint8_t &v) {
    y = static_cast<uint8_t>(0.299 * r + 0.587 * g + 0.114 * b);
    u = static_cast<uint8_t>(128 + (-0.1687 * r - 0.3313 * g + 0.5 * b));
    v = static_cast<uint8_t>(128 + (0.5 * r - 0.4187 * g - 0.0813 * b));
}
  • YUV 转换为 RGB:

c++代码实现:

c++ 复制代码
void YUVtoRGB(uint8_t y, uint8_t u, uint8_t v, uint8_t &r, uint8_t &g, uint8_t &b) {
    int _y = static_cast<int>(y);
    int _u = static_cast<int>(u) - 128;
    int _v = static_cast<int>(v) - 128;

    int _r = static_cast<int>(_y + 1.140 * _v);
    int _g = static_cast<int>(_y - 0.394 * _u - 0.581 * _v);
    int _b = static_cast<int>(_y + 2.032 * _u);

    r = std::clamp(_r, 0, 255);
    g = std::clamp(_g, 0, 255);
    b = std::clamp(_b, 0, 255);
}

4. YUV 采样格式

  • 4:4:4:Y、U、V 采样率相同(无损画质)。
  • 4:2:2:U、V 采样率减半(常用于广播)。
  • 4:2:0:U、V 采样率降低至 1/4(广泛用于视频压缩)。
  • 4:1:1:U、V 采样率进一步降低,适用于低码率传输。
相关推荐
差不多的周周8 小时前
《骨架上下文:基于零镜头骨架的动作识别的骨架侧上下文提示学习》论文核心部分详解
学习
音视频牛哥8 小时前
四足机器人如何做好智慧电力巡检?从低延迟图传到可信巡检数据闭环
音视频·四足机器人·智慧电力巡检·whip whep·机器人巡检·工业音视频巡检·智能电力巡检技术方案
Century_Dragon9 小时前
从挂图到VR:汽修专业的一堂新能源原理课可以怎么上~
学习
美狐美颜sdk10 小时前
直播APP接入美颜SDK后出现卡顿怎么办?从性能瓶颈寻找解决方案
android·人工智能·音视频·美颜sdk·直播美颜sdk
知识分享小能手10 小时前
C++ 学习教程,从入门到精通,C++对象和类 — 详细知识点总结(10)
开发语言·c++·学习
美狐美颜SDK开放平台10 小时前
直播APP开发实战:从摄像头调用到视频美颜sdk集成
android·人工智能·计算机视觉·音视频·直播美颜sdk
New农民工10 小时前
倒立摆训练秘籍:理解训练参数
学习
L@ncor11 小时前
第五章 基于低代码平台的智能体搭建 · 学习笔记(Coze / Dify / FastGPT / n8n)
笔记·学习·低代码·agent·prompt工程
迪丽热爱11 小时前
多媒体应用20-903(补)
学习
2601_9623811312 小时前
历史视频朝代更替动效怎么做?把 AE 关键帧换成 AI 分镜动画的实战拆解
人工智能·nginx·音视频