为什么是视频传输用YUV格式,而放弃RGB格式?

news2024/10/7 18:23:15

在这里插入图片描述

😎 作者介绍:我是程序员行者孙,一个热爱分享技术的制能工人。计算机本硕,人工制能研究生。公众号:AI Sun,视频号:AI-行者Sun
🎈 本文专栏:本文收录于《音视频》系列专栏,相信一份耕耘一份收获,我会分享音视频相关学习内容,不说废话,祝大家都offer拿到手软
🤓 欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深度学习从0到1系列文章。
🖥随时欢迎您跟我沟通,一起交流,一起成长、进步!

YUV格式简介

YUV格式是一种将亮度和色度信息分离的像素表示方法,它在图像和视频处理中扮演着重要角色。在YUV格式中,“Y”代表亮度,也就是我们通常所说的灰度值,它决定了图像的明暗程度。而“U”和“V”则代表色度,它们负责描述图像的色彩和饱和度,帮助我们区分不同的颜色。

YCbCr是YUV的一个变种,它在国际电信联盟(ITU)制定的BT.601标准中被定义。YCbCr中的“Y”代表亮度分量,与YUV中的Y相同,而“Cb”和“Cr”则分别代表蓝色和红色色度分量。尽管YCbCr与YUV在概念上相似,但它们在数值表示上有所不同,YCbCr是YUV经过一定的缩放和偏移得到的。

YCbCr格式因其广泛的应用而广为人知,特别是在JPEG和MPEG等图像和视频编码标准中。它支持多种采样格式,包括4:4:4、4:2:2、4:1:1和4:2:0,这些格式在不同的应用场景下提供了不同的图像质量和压缩效率的平衡。

它是基于人眼对亮度变化比色度变化更敏感的原理设计的。YUV格式广泛应用于视频压缩和传输,因为它能够有效地减少数据量,同时保持图像质量。

什么是YUV格式?

YUV格式是一种颜色空间,它将颜色信息分解为三个独立的通道:Y通道代表亮度信息,U通道和V通道则代表颜色信息。这种分离允许对亮度和颜色进行独立处理,从而在压缩时可以更有效地利用人眼对亮度变化的敏感性。

YUV格式的诞生由来

在这里插入图片描述这是一副RGB三通道组成的图像,那么我们存储它可能就是480x720x3(长,宽,RGB值),这样存储是没问题的,问题是现在的数据量和存储成本,导致我们需要去考虑如何压缩视频呢?

YUV格式的诞生源于彩色电视技术的发展和对兼容性的需求。在彩色电视出现之前,黑白电视只能显示灰度图像。随着技术的进步,彩色电视开始普及,但如何让彩色电视与黑白电视共存,同时接收相同的电视信号,成为了一个挑战。

YUV格式的出现正是为了解决这一问题。它将图像信息分为亮度(Y)和色度(U和V)两个部分。亮度信息(Y)可以独立于色度信息存在,使得黑白电视能够接收到Y信号并显示灰度图像。而色度信息(U和V)则为彩色电视提供了必要的色彩数据。

通过YUV格式,广播电视中心可以仅广播一套信号,这套信号既包含黑白图像所需的亮度信息,也包含彩色图像所需的色度信息。黑白电视在接收到YUV信号时,只解析Y分量,而忽略U和V分量,从而显示黑白图像。彩色电视则能够解析全部的YUV信号,将Y分量与U、V分量结合,从而显示出彩色图像。

YUV格式的这种设计,不仅实现了彩色电视和黑白电视的兼容,还为图像和视频的压缩、存储和传输提供了便利。

在这里插入图片描述同样一幅图,看看YUV格式是如何存储的

其中的Y表示一幅灰度图,如果叠加了UV,就可以组合成一幅彩色画面,但对于黑白电视来说,只要Y就行。整个数字电视信号的传播过程可以用下图表示:
在这里插入图片描述YUV除了可以分离黑白信息和彩色信息满足兼容性这个优势以外,还可以根据需要在采样时进行压缩,进而减少传输带宽,这是它的另一个优势。(具体看后面的内容)

YUV格式的类型

在这里插入图片描述

YUV格式有多种变体,主要区别在于采样方法的不同。以下是一些常见的YUV格式:

  • 4:4:4:每个像素点都有Y、U、V三个分量,提供最高质量的图像,但数据量最大。
    在这里插入图片描述

  • 4:2:2:水平方向上,每两个像素共享U和V分量,适用于广播级视频。
    研究表明,我们对亮度比较敏感,而对色度不怎么敏感, 绝大部分相邻的两个像素,色度信息差异不大,因此可以适当丢弃部分色差数据。具体就是,在水平方向上相邻的两个像素,共享同一个色度分量,即水平方向上亮度分量与色度分量采样比例为2:1, 每两个Y分量共享一组UV分量,如下图所示:
    在这里插入图片描述
    这样的话, 第一和第二个像素点共用一组UV分量,第三和第四个像素点共用了一组UV分量,由于丢弃了部分色度分量,这样就节省了图像空间。相邻2个像素点占用的空间为:(Y+Y+U+V) = 4 byte, 平均一个像素点占用的空间为:4 /2 = 2 byte。

  • 4:2:0:水平和垂直方向上,每四个像素共享U和V分量,常见于DVD视频和网络视频流。

专家们进一步研究表示,每一行的相邻两个像素与下一行同位置的两个像素数据差异不大,可以进一步的丢数据。具体就是,在第一行采集时,只采集Y和其中一种色度分量(U 或者 V),在第二行采集时,仍然采集Y和其中的另一个色度分量。有点拗口,简单的说就是,第一行只采集Y和U,第二行只采集Y和V。这样采集的效果如下:
在这里插入图片描述
那该如何合成一个完整的像素点呢?水平方向上相邻的两个像素点已经无法再合成为一个完整的像素点(因为不是缺少U就是缺少V),

很简单,只要把上下两行的UV分量组合起来就行了。

在这里插入图片描述
就是说,第一行的第一个像素点(YU)可以使用第二行第一个像素点的V,组合成一个完整的YUV; 第一行第二个像素点(Y)可以使用第一行第一个像素点的U和第二行第一个像素点的V, 组合成一个完整的YUV,上下两行相邻的4个像素点共享一组UV分量。

这样的话,相邻4个像素点所占用的空间为(Y+Y+Y+Y+U+V) = 6 byte, 平均每个像素点占用的空间为 6 / 4 = 1.5 byte。可以看到 YUV 4:2:0 采样的图像比YUV444或 RGB 模型图像节省了一半的存储空间,因此它也是比较主流的采样方式。

  • 4:1:1:水平方向上,每四个像素共享U分量,垂直方向上,每两个像素共享V分量,数据量较小,但可能

导致颜色细节丢失。

YUV与RGB的转换

RGB(红绿蓝)是另一种常见的颜色空间,广泛应用于显示器和图像编辑。YUV和RGB之间可以通过特定的转换公式相互转换。转换公式如下:

  • Y = 0.299R + 0.587G + 0.114B
  • U = -0.169R - 0.331G + 0.5B
  • V = 0.5R - 0.419G - 0.081B

反之,从YUV转换回RGB的公式为:

  • R = Y + 1.0 * V
  • G = Y - 0.34414 * U - 0.71414 * V
  • B = Y + 2.0 * U

YUV格式的应用

YUV格式的应用非常广泛,可以将其主要应用分为以下三个部分进行详细阐述:

1. 视频编码与传输

YUV格式在视频编码和传输中的应用是其最显著的特点之一。视频编码标准如MPEG-2、H.264和H.265等,都采用了YUV色彩空间来优化压缩效率。这些标准利用人眼对亮度变化比色度变化更敏感的特性,通过不同的采样率来压缩亮度和色度信息。例如,在4:2:0采样格式中,色度信息的采样率是亮度信息的一半,这样可以在不明显降低视觉质量的情况下减少数据量,从而节省存储空间和带宽。

2. 图像与视频编辑

在图像和视频编辑领域,YUV格式提供了对图像进行更精细调整的可能性。编辑软件可以独立地处理亮度(Y)和色度(U、V)信息,使得编辑者能够分别调整图像的亮度、对比度、饱和度和色调。这种分离处理方式对于创建专业级别的视觉效果至关重要。例如,在调整肤色或特定颜色时,编辑者可以只调整色度分量,而不影响整体的亮度平衡。

3. 广播与数字媒体

YUV格式在广播和数字媒体中的应用也非常重要。数字电视广播采用YUV格式来确保信号的兼容性,使得黑白和彩色电视都能接收到适合自己显示能力的信号。此外,在网络流媒体和视频点播服务中,YUV格式同样发挥着重要作用。流媒体服务提供商通常会使用YUV格式来优化视频的传输质量,通过调整色度的采样率来平衡视频质量与传输带宽的需求。

这三个部分概括了YUV格式在现代数字媒体处理中的核心应用。随着技术的发展和创新,YUV格式的应用领域还在不断扩展,它在图像和视频处理中的重要性也在不断增加。

结论

YUV格式是一种强大的颜色编码系统,它通过分离亮度和颜色信息,为图像和视频的存储、传输和处理提供了高效的方法。了解YUV格式及其与RGB的转换关系,对于从事图像和视频相关工作的专业人员来说至关重要。

希望这篇博客能帮助你更好地理解YUV格式及其在数字媒体领域的应用。如果你对YUV有更深入的问题或想要了解更多相关信息,欢迎在评论区留言讨论。

祝大家学习顺利~
如有任何错误,恳请批评指正~~
以上是我通过各种方式学习的经验和方法,欢迎大家评论区留言讨论呀,如果文章对你们产生了帮助,也欢迎点赞收藏,我会继续努力分享更多干货~


🎈关注我的公众号AI Sun可以获取Chatgpt最新发展报告以及腾讯字节等众多大厂面经。
😎也欢迎大家和我交流,相互学习,提升技术,风里雨里,我在等你~


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1886894.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何寻找一个领域的顶级会议,并且判断这个会议的影响力?

如何寻找一个领域的顶级会议,并且判断这个会议的影响力? 会议之眼 快讯 很多同学都在问:学术会议不是期刊,即使被SCI检索,也无法查询影响因子。那么如何知道各个领域的顶级会议,并对各个会议有初步了解呢…

Qt加载SVG矢量图片,放大缩小图片质量不发生变化。

前言: 首先简单描述下SVG: SVG 意为可缩放矢量图形(Scalable Vector Graphics)。 SVG 使用 XML 格式定义图像。 给界面或者按钮上显示一个图标或背景图片,日常使用.png格式的文件完全够用,但是有些使用场景需要把图…

代码随想录第41天|动态规划

322. 零钱兑换 dp[j] : 最小硬币数量, j 为金额(相当于背包空间)递推公式 : dp[j] min(dp[j - coins[i]] 1, dp[j])初始化: 需要一个最大值, 避免覆盖, dp[0] 0遍历顺序: 钱币有序无序不影响, 因为求解最小个数, 结果相同(先遍历物品后背包, 先背包后物品都可) class Solut…

NSSCTF-Web题目21(文件上传-phar协议、RCE-空格绕过)

目录 [NISACTF 2022]bingdundun~ 1、题目 2、知识点 3、思路 [FSCTF 2023]细狗2.0 4、题目 5、知识点 6、思路 [NISACTF 2022]bingdundun~ 1、题目 2、知识点 文件上传,phar伪协议 3、思路 点击upload,看看 这里提示我们可以上传图片或压缩包&…

Nginx主配置文件---Nginx.conf

nginx主配置文件的模块介绍 全局块: 全局块是配置文件从开始到 events 块之间的部分,其中指令的作用域是 Nginx 服务器全局。主要指令包括: user:指定可以运行 Nginx 服务的用户和用户组,只能在全局块配置。例如&…

Linux多线程【线程互斥】

文章目录 Linux线程互斥进程线程间的互斥相关背景概念互斥量mutex模拟抢票代码 互斥量的接口初始化互斥量销毁互斥量互斥量加锁和解锁改进模拟抢票代码(加锁)小结对锁封装 lockGuard.hpp 互斥量实现原理探究可重入VS线程安全概念常见的线程不安全的情况常…

【开发环境】MacBook M系列芯片环境下搭建完整Python开发环境

文章目录 Anaconda和Python的关系?1. Python2. Anaconda 安装AnacondaPycharm整合Anaconda运行你的Python代码 Anaconda和Python的关系? 如果有简单了解过Python语言的,那么你很容易就会听到有人会叫你安装Anaconda。 那么Anaconda是什么&am…

编译原理2

推导和短语 推导 推导过程中,每一步推导都是对句型的 最右非终结符 进行替换,最右推导(规范推导); 短语 用 β 替换 A,则 β 就是 关于A 的一个短语; 直接短语是短语范围内的一步推导; 直接短语可能不…

Rust学习笔记007:Trait --- Rust的“接口”

Trait 在Rust中,Trait(特质)是一种定义方法集合的机制,类似于其他编程语言中的接口(java)或抽象类(c的虚函数)。 。Trait 告诉 Rust 编译器: 某种类型具有哪些并且可以与其它类型共享的功能Trait:抽象的…

[ROS 系列学习教程] 建模与仿真 - 使用 ros_control 控制差速轮式机器人

ROS 系列学习教程(总目录) 本文目录 一、差速轮式机器人二、差速驱动机器人运动学模型三、对外接口3.1 输入接口3.2 输出接口 四、控制器参数五、配置控制器参数六、编写硬件抽象接口七、控制机器人移动八、源码 ros_control 提供了多种控制器,其中 diff_drive_cont…

Datawhale - 角色要素提取竞赛

文章目录 赛题要求一、赛事背景二、赛事任务三、评审规则1.平台说明2.数据说明3.评估指标4.评测及排行 四、作品提交要求五、 运行BaselineStep1:下载相关库Step2:配置导入Step3:模型测试Step4:数据读取Step5:Prompt设…

工业 web4.0UI 风格品质卓越

工业 web4.0UI 风格品质卓越

【力扣 - 每日一题】3115. 质数的最大距离(一次遍历、头尾遍历、空间换时间、埃式筛、欧拉筛、打表)Golang实现

原题链接 题目描述 给你一个整数数组 nums。 返回两个(不一定不同的)质数在 nums 中 下标 的 最大距离。 示例 1: 输入: nums [4,2,9,5,3] 输出: 3 解释: nums[1]、nums[3] 和 nums[4] 是质数。因此答…

WPF自定义模板--Button

属性&#xff1a; TemplateBinding&#xff1a;用于在ControlTemplate中绑定到控件的属性&#xff0c;例如Background、BorderBrush等。TargetType&#xff1a;指定该模板应用于哪种控件类型。在这个例子中&#xff0c;是Button。 标准的控件模板代码&#xff1a; <Style…

线性代数大题细节。

4.4 方程组解的结构&#xff08;二&#xff09;_哔哩哔哩_bilibili

eNSP中WLAN的配置和使用

一、基础配置 1.拓扑图 2.VLAN和IP配置 a.R1 <Huawei>system-view [Huawei]sysname R1 GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 200.200.200.200 24 b.S1 <Huawei>system-view [Huawei]sysname S1 [S1]vlan 100 [S1-vlan100]vlan 1…

vue3 window.location 获取正在访问的地址,也可以通过useRoute来获取相关信息。

1、一般我们在开发的vue3项目的时候&#xff0c;地址是这样&#xff1a;http://192.168.1.101:3100/#/login 然后我们在布署完成以后一般是这样https://xxx.yyyyy.com/uusys/#/login 其实xxx可以是www&#xff0c;也可以是一个二级域名 yyyyy.com是域名&#xff0c;uusys一般…

家政小程序的开发:打造现代式便捷家庭服务

随着现代生活节奏的加快&#xff0c;人们越来越注重生活品质与便利性。在这样的背景下&#xff0c;家政服务市场迅速崛起&#xff0c;成为许多家庭日常生活中不可或缺的一部分。然而&#xff0c;传统的家政服务往往存在信息不对称、服务效率低下等问题。为了解决这些问题&#…

Windows编程上

Windows编程[上] 一、Windows API1.控制台大小设置1.1 GetStdHandle1.2 SetConsoleWindowInfo1.3 SetConsoleScreenBufferSize1.4 SetConsoleTitle1.5 封装为Innks 2.控制台字体设置以及光标调整2.1 GetConsoleCursorInfo2.2 SetConsoleCursorPosition2.3 GetCurrentConsoleFon…

elementPlus自定义el-select下拉样式

如何在f12元素选择器上找到下拉div呢&#xff1f; 给el-select添加 :popper-append-to-body"false" 即可&#xff0c;这样就可以将下拉框添加到body元素中去&#xff0c;否则当我们失去焦点&#xff0c;下拉就消失了&#xff0c;在元素中找不到el-select。剩下就可以…