音视频开发—视频相关概念:YUV与RGB

文章目录

    • YUV相关概念
      • 组成部分
      • 优点
      • 常见的 YUV 格式
      • 数据量的计算
      • YUV4:2:0 存储格式
        • 平面模式(planar):
        • 打包模式(packed)
    • RGB 和 YUV 的定义
      • 关系与转换
        • RGB 到 YUV 的转换
        • YUV 到 RGB 的转换
      • 使用场景
      • 优缺点

YUV相关概念

YUV 是一种颜色编码格式,用于视频和图像处理。它与 RGB(红、绿、蓝)颜色模型不同,将颜色信息分为亮度(Y)和色度(U 和 V)分量。YUV 格式主要用于模拟视频和数字视频系统。

组成部分

  1. Y(亮度)

    • 代表图像的明暗信息。
    • 不包含颜色信息,仅表示图像的亮度。
  2. U 和 V(色度)

    • U(蓝色色度)和 V(红色色度)代表颜色信息。
    • 这些分量描述颜色的饱和度和色调。

优点

  • 带宽效率:通过分离亮度和色度分量,可以在压缩视频时减少带宽需求,因为人眼对亮度的变化比对色度的变化更敏感。
  • 兼容性:YUV 格式与黑白电视兼容,因为黑白电视只读取亮度信息。

常见的 YUV 格式

  • YUV 4:4:4:每个像素都有完整的亮度和色度信息。

    在这里插入图片描述

  • YUV 4:2:2:色度分量的水平分辨率是亮度分量的一半。
    在这里插入图片描述

  • YUV 4:2:0:色度分量的水平和垂直分辨率都是亮度分量的一半。

    4:2:0 表示在一个 2x2 的像素块中,亮度(Y)分量有 4 个样本,而色度(U 和 V)分量各有 1 个样本。这意味着色度信息的水平和垂直分辨率都是亮度分辨率的一半。

    在这里插入图片描述

YUV 格式广泛应用于视频压缩、电视广播和各种视频处理任务中。

RGB 和 YUV 是两种不同的颜色编码方式,各有其特定的应用场景和优缺点。它们之间的关系可以通过颜色空间转换来理解。

数据量的计算

YUV = Y*1.5

在 YUV 4:2:0 采样格式下,YUV 数据量是亮度(Y)数据量的 1.5 倍。这是因为:

  1. 亮度数据:每个像素都有一个 Y 分量。
  2. 色度数据:每 4 个像素共享 1 个 U 分量和 1 个 V 分量(在一个 2x2 像素块中)。

假设一个图像有 N 个像素:

  • 亮度(Y)数据量:N 个样本。
  • 色度(U 和 V)数据量:每个色度分量有 N/4 个样本,因此两个色度分量共计 N/2 个样本。

总的数据量 = Y 数据量 + U 数据量 + V 数据量 = N + N/4 + N/4 = N + N/2 = 1.5N

因此,YUV 数据量是亮度(Y)数据量的 1.5 倍。

YUV = RGB / 2

这个表达式表明,在数据量上,YUV 4:2:0 格式比 RGB 格式节省一半的数据量。这是因为:

  • RGB 格式:每个像素有 3 个分量(R、G、B),总数据量是 3N(N 是像素数)。
  • YUV 4:2:0 格式:总数据量是 1.5N(如上所述)。

将 YUV 数据量与 RGB 数据量比较:YUV = RGB / 2

这意味着 YUV 4:2:0 格式的数据量是 RGB 格式数据量的一半。

这两个表达式说明了 YUV 4:2:0 在视频压缩中的优势,即通过减少色度数据量,显著降低了总数据量,而不显著影响视觉质量。

YUV4:2:0 存储格式

在这里插入图片描述

是安装分层存储的,先按照Y分量存储,最后读取UV相关的,兼容性比较好,黑白电视直接读取,前四行即可。YUV的关系为 4个Y 对应一个U 一个V

平面模式(planar):
  1. Y 平面:首先存储所有像素的亮度数据(Y 分量)。
  2. U 平面:接着存储所有像素的色度数据(U 分量),每个色度值对应 2x2 像素块。
  3. V 平面:最后存储所有像素的色度数据(V 分量),每个色度值对应 2x2 像素块。

假设图像尺寸为 W×H,则:

  • Y 平面大小:W×H
  • U 平面大小:W/2×H/2
  • V 平面大小:W/2×H/2

总数据量为:W×H + (W×H)/4 + (W×H)/4 = W×H × 1.5

I420 : YYYYYYYY UU VV ------------>YUV420P

YV12: YYYYYYYY VV UU------------>YUV420P

打包模式(packed)

在某些情况下,色度分量 U 和 V 可以交织存储,以减少存取操作的复杂性。

在这种模式下,U 和 V 的存储大小与平面模式相同,但存储顺序不同。

常见的格式有NV12 和NV21

NV12: YYYYYYYY UVUV ---------->YUV420SP

NV21: YYYYYYYY VUVU ---------->YUV420SP

RGB 和 YUV 的定义

  • RGB(红、绿、蓝):

    • 一种加色法颜色模型,通过混合红色、绿色和蓝色光来创建各种颜色。
    • 常用于显示器、相机和其他捕获设备。
  • YUV(亮度、色度 - U 和 V):

    • 将颜色信息分为亮度(Y)和两个色度分量(U 和 V)。
    • 主要用于视频压缩和传输。

关系与转换

RGB 到 YUV 的转换

RGB 转 YUV 可以通过以下数学公式实现:

[ Y = 0.299R + 0.587G + 0.114B ]
[ U = 0.492 (B - Y) ]
[ V = 0.877 (R - Y) ]

这些公式表示如何从 RGB 值计算 YUV 值。

YUV 到 RGB 的转换

从 YUV 转回 RGB 可以通过以下公式:

[ R = Y + 1.140V ]
[ G = Y - 0.395U - 0.581V ]
[ B = Y + 2.032U ]

使用场景

  • RGB:用于需要精确颜色表示的应用,如计算机图形学、图像编辑和显示设备。
  • YUV:用于视频压缩和传输,因其更有效的带宽利用和与模拟电视的兼容性。

优缺点

  • RGB

    • 优点:直观,易于理解和操作。
    • 缺点:不适合视频压缩,带宽需求较高。
  • YUV

    • 优点:更适合视频压缩,带宽效率高,兼容性好。
    • 缺点:需要转换过程,色彩操作较复杂。

总的来说,RGB 和 YUV 各有优势,具体选择取决于应用需求和具体场景。

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

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

相关文章

JVM-JAVA-类加载过程

JVM源码 类加载到 JVM 的过程通过 java 命令执行代码的流程 类加载到 JVM 的过程 在运行一个 main 函数启动程序是,首先需要类加载起把主类加载到 JVM 中 通过 java 命令执行代码的流程 loadClass的类加载过程有如下几步: 类被加载到方法区中后主要包…

Maven项目通过maven central 发布到中央仓库 https://repo.maven.apache.org/ 手把手教学 最新教学

一、注册maven central账号 ​ https://central.sonatype.com/publishing/namespaces 我这里直接使用github账号登录 ,可以自己注册或者直接使用google账号或者github账号登录 这里github账号登录之后 应该只出现io.github 下面的io.gitee我也验证过 所以这里出…

Java时间类--JDK8

为什么JDK8会又新增时间相关类呢? ① JDK7的时间对象如果需要比较大小的话,必须都先转换成毫秒值;JDK8则不需要,可以直接比较。 ② JDK7的时间对象可以修改,在多线程环境下就会导致数据不安全;JDK8不能修改…

输入3个字符串,要求将字母按由小到大顺序输出

对于将3个整数按由小到大顺序输出,是很容易处理的。可以按照同样的算法来处理将3个字符串按大小顺序输出。可以直接写出程序。 编写程序: 运行结果: 这个程序是很好理解的。在程序中对字符串变量用关系运算符进行比较,如同对数值…

【Git 版本管理】合并 + 变更,看懂Git

看懂 Git 合并操作分离 HEAD分离 HEAD 测试 相对引用(^ || ~)操作符 ^相对引用 ^ 测试操作符 ~相对引用 ~ 测试 撤销变更Git ResetGit Revert撤销变更 测试 整理提交记录Git Cherry-pick测试 交互式 rebase交互式 rebase 测试 合并操作 关键字:commit、branch、merg…

Minio篇:初识MinIO

1. MinIO快速入门 1.1.MinIO核心概念 下面介绍MinIO中的几个核心概念,这些概念在所有的对象存储服务中也都是通用的。 对象(Object) 对象是实际的数据单元,例如我们上传的一个图片。 存储桶(Bucket) 存储…

【JAVA SE】多态

✨✨欢迎大家来到Celia的博客✨✨ 🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉 所属专栏:JAVA 个人主页:Celias blog~ 目录 引言 一、多态 1.1 多态的概念 1.2 多态的实现条件 1.3…

深入探讨 Android 的 View 显示过程与源码分析

文章目录 1. 探讨 Android 的 View 显示过程1.1. onFinishInflate1.2. onAttachedToWindow1.3. onMeasure1.4. onSizeChanged1.5. onLayout1.6. onDraw 2. 系统代码分析1.1. onFinishInflate1.2. onAttachedToWindow1.3. onMeasure1.4. onSizeChanged1.5. onLayout1.6. onDraw …

数字化浪潮中的TPM革新:打造高效生产新范式

在数字化浪潮席卷全球的今天,传统生产管理模式正面临前所未有的挑战与机遇。TPM(全面生产维护)作为一种先进的生产管理理念,如何在数字化驱动下焕发新的活力,成为制造业转型升级的关键一环。 数字化技术为TPM带来了前…

探秘Flask中的表单数据处理

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言 二、Flask中的表单处理机制 三、Flask表单处理实战 四、处理表单数据的注意事项…

为什么要使用动态代理IP?

一、什么是动态代理IP? 动态代理IP是指利用代理服务器来转发网络请求,并通过不断更新IP地址来保护访问者的原始IP,从而达到匿名访问、保护隐私和提高访问安全性的目的。动态代理IP在多个领域中都有广泛的应用,能够帮助用户…

vue路由跳转之【编程式导航与传参】

vue路由有两种跳转方式 ----> 编程式与声明式,本文重点讲解vue路由的【编程式导航 】【编程式导航传参 ( 查询参数传参 & 动态路由传参 ) 】等内容,并结合具体案例让小伙伴们深入理解 ,彻底掌握!创作不易,需要的…

2023年全球DDoS攻击现状与趋势分析

天翼安全科技有限公司副总工程师、运营保障部总经理陈林表示,2023年扫段攻击频次快速增长,成为网络基础设施面临的最大威胁。为躲避防御,低速扫段攻击成为主流达到攻击总数的73.19%;43.26%的C段攻击持续时间小于5分钟,…

Linux中部署MinIO

Linux中部署MinIO 下载MinIO可执行程序: wget https://dl.min.io/server/minio/release/linux-amd64/minio 添加执行权限: chmod x minio 创建存储目录,例如/data: mkdir -p /data 运行MinIO服务器,需要设置MIN…

【设计模式】JAVA Design Patterns——Factory Method(虚拟构造器模式)

🔍目的 为创建一个对象定义一个接口,但是让子类决定实例化哪个类。工厂方法允许类将实例化延迟到子类 🔍解释 真实世界例子 铁匠生产武器。精灵需要精灵武器,而兽人需要兽人武器。根据客户来召唤正确类型的铁匠。 通俗描述 它为类…

三维前端项目中用THREEWebGLRenderer于创建渲染器对象

在三维前端项目开发中,可以使用THREE.WebGLRenderer创建渲染器对象。艾斯视觉作为行业ui设计与前端开发服务商很高兴能在这里与你共同探讨:THREE.WebGLRenderer是 Three.js 库中用于将 3D 场景渲染到屏幕上的类。以下是一个示例代码,展示了如…

element中table的selection-change监听改变的那条数据的下标

<el-table ref"table" :loading"loading" :data"tableData" selection-change"handleSelectionChange"></el-table>当绑定方法selection-change&#xff0c;当选择项发生变化时会触发该事件 // 多选框选中数据handleSele…

truncate IDL_UB1$导致数据库open hang---惜分飞

在一次数据库恢复中,发现IDL_UB1$表被truncate,然后数据库在open过程中会hang住,而且不报任何错误,这里通过试验进行重现.对于这类问题,以前有过类似处理测试&#xff1a;truncate IDL_UB1$恢复试验数据库版本 SQL> select * from v$version; BANNER ---------------------…

vivado原语使用

首先介绍一下原语&#xff1a;其英文名字为Primitive。原语是Xilinx针对其器件特征开发的一系列常用模块的名字&#xff0c;用户可以将其看成Xilinx公司为用户提供的ip&#xff0c;是芯片中的基本元件&#xff0c;代表FPGA中实际拥有的硬件逻辑单元&#xff0c;如LUT&#xff0…

汇编:x86汇编环境搭建与基础框架(32位)

32位汇编代码编写环境&#xff1a;Visual Studio&#xff08;笔者用的版本为2017&#xff09;&#xff1b;先来说一下在Visual Studio 2017中编写汇编代码的准备操作&#xff1a; ①创建空项目 ②设置项目属性&#xff1a;平台工具集设置为Visual Studio 2015(v140)&#xff0…