YUV图像基础知识

news2025/1/15 16:54:42

概念

YUV和RGB的功能类似,都是用来表示图像色彩的。但是对于 YUV 所表示的图像,Y 和 UV 分量是分离的。如果只有 Y 分量而没有 UV 分离,那么图像表示的就是黑白图像。彩色电视机采用的就是 YUV 图像,解决与和黑白电视机的兼容问题,使黑白电视机也能接受彩色电视信号。 YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。因此RGB用于渲染,YUV用于传输。

因为人眼对色度的敏感程度低于对亮度的敏感程度。主要原因是视网膜杆细胞多于视网膜锥细胞,其中视网膜杆细胞的作用就是识别亮度,视网膜锥细胞的作用就是识别色度。所以,眼睛对于亮度的分辨要比对颜色的分辨精细一些。利用这个原理,可以把色度信息减少一点,人眼也无法察觉这一点。 这也是视频压缩的原理之一。

我们重温一下这张图:视频文件播放流程图

视频文件播放流程图

img

视频通过解码器解码出来得到YUV数据,YUV再转换成RGB交给GPU渲染就能在显示器上看到画面了。

YUV的储存方式

YUV格式有两大类:planar和packed。

对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。

对于packed的YUV格式,每个像素点的Y,U,V是连续交替存储的。

YUV的采样

主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0

YUV4:4:4 表示完全取样,每一个Y对应一组UV分量。 一个YUV占 8+8+8 = 24bits,3个字节。

YUV4:2:2 表示2:1的水平取样,垂直完全采样,,每两个Y共用一组UV分量。 一个YUV占 8+4+4 = 16bits 2个字节。

YUV4:2:0 表示2:1的水平取样,垂直2:1采样,每四个Y共用一组UV分量。 一个YUV占 8+2+2 = 12bits 1.5个字节

注意:YUV 4:2:0这并不意味着只有Y、U,没有V分量,只是说U分量和V分类交替采样。 一个字节是8位

直接上图:

[图片上传失败...(image-9da4c9-1582641374506)]

为什么这张图是8X4的图,因为我们假设这是一张宽是8像素,高是4个像素的图,当然你也可以用4X4的。

YUV与RGB转换

RGB转成YUV:

Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16 Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128 Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128

YUV转成RGB: B = 1.164(Y - 16) + 2.018(U - 128) G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128) R = 1.164(Y - 16) + 1.596(V - 128)

YUV420p和YUV420sp具体分类和详情

YUV420也是目前最主流的采样方式,因为这样的采样最省空间,而又不会大幅度影响人类肉眼的观赏性。

CSDN后台私信或文末卡片加入免费领取最新最全C++/音视频开发学习提升资料,内容包括(C/C++,Linux 服务器开发,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

YUV420p:又叫planer平面模式,Y ,U,V分别在不同平面,也就是有三个平面。

YUV420p又分为YU12 和 YU21(又叫I420):他们的区别只是存储UV的顺序不一样而已。

YU12:安卓的模式。存储顺序是先存Y,再存U,最后存V。YYYYUUUVVV

YV12:存储顺序是先存Y,再存V,最后存U。YYYVVVUUU

YUV420SP是packed类型的。它是先存储了 Y 分量,但接下来并不是再存储所有的 U 或者 V 分量,而是把 UV 分量交替连续存储。

NV12 和 NV21 格式都属于YUV420SP类型。

NV12 是 IOS 中有的模式,它的存储顺序是先存 Y 分量,再 UV 进行交替存储。

NV21 是 安卓 中有的模式,它的存储顺序是先存 Y 分量,在 VU 交替存储。

YUV的内存大小计算

内存大小 = 一个YUV的字节大小 * 宽 * 高 以YUV420为例,总大小=宽1.5 Y分量 = 宽 * 高 U分量 = 总大小 / 4 V分量 = 总大小 / 4

结语

对于YUV基本的认识今天先了解到这里,如果你也想深入学习音视频开发,请关注共同进步。

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

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

相关文章

swift枚举(二)

swift枚举(一) No-payload enums 布局比较简单&#xff0c;也好理解&#xff0c;接下来看看 Single-payload enums Single-payload enums enum IFLEnum {case test_one(Bool)case test_twocase test_threecase test_four}print(MemoryLayout<IFLEnum>.size)print(Memor…

Vue事件处理器:事件绑定基础、事件修饰符:stop、prevent、capture、self、once;

先看代码&#xff1a; <body><div id"box">{{count}}<button click"handleAdd1()">add1</button><button click"handleAdd2">add2</button></div><script>new Vue({el: "#box",dat…

关于电脑使用的实用技巧

电脑几乎是我们每天都会用到的工具&#xff0c;那么电脑的使用技巧你知道多少呢&#xff1f;今天&#xff0c;我来为大家整理了几个常用的技巧&#xff0c;希望对大家的工作或学习效率有所帮助。 技巧一&#xff1a;快速查找文档按Windows E键打开电脑中的资源管理器&#xff0…

[附源码]SSM计算机毕业设计个性化新闻推荐系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

记一次神奇的 pipe 错误

文章目录1. 写在最前面2. 问题原因3. 解决问题3.1 CAP 的历史说明3.2 CAP 拆分的能力集合说明3.3 如何知道某个程序的能力集合3.3.1 查看只能写入 4096B 大小的程序能力位图3.3.2 查看能写入 65536B 大小的能力位图3.3.3 比较两个能力位图3.3.4 为 pod 增加 CAP_SYS_RESOURCE 的…

数字信号处理-4-三角函数合成与傅里叶级数

1 三角函数合成 函数正交&#xff08;数字信号处理-3-函数的正交&#xff09;&#xff0c;那它们相互之间无法通过组合得出对方的表达式&#xff0c;如&#xff1a;sinx 与 cosx 正交&#xff0c;acosnx 是无法表示 sinx 的。相互正交的各类三角函数是制作许多波形的基本单位。…

KT148A语音芯片按键版本一对一触发播放功能描述_V4

目录 一、简介 KT148A语音芯片--按键版本&#xff0c;支持3个IO口一对一触发 。同时也支持用户自己更换芯片内部的声音文件&#xff0c;方法&#xff0c;参考我们另外一份文档的描述“20220704_KT148A芯片自己更换声音的方法V3”。请留意&#xff0c;需要样品联系客服&#xf…

钡铼EdgeIO边缘计算 I/O 控制器

BL200 系列耦合器是一个数据采集和控制系统&#xff0c;基于强大的 32 位微处理器设计&#xff0c; 采用 Linux 操作系统&#xff0c;支持 Modbus&#xff0c;MQTT&#xff0c;OPC UA&#xff0c;Profinet&#xff0c;EtherCAT&#xff0c;Ethernet/IP&#xff0c; BACnet/IP…

程序员月薪8000,丢人吗?

近日&#xff0c;拉勾招聘数据研究院针对平台的程序员群体开展了深度调研&#xff0c;发布了《拉勾招聘2022程序员群体职场洞察报告》&#xff0c;呈现程序员最新的职场薪资水平。 *数据来源拉勾 从上图中可以看到&#xff0c;74%的00后应届毕业生的月薪在1-3万元区间&#…

C++语言的return语句的说明

C语言的return语句的说明 为了完成某一功能的程序指令&#xff08;语句&#xff09;的集合&#xff0c;称为函数。在程序中&#xff0c;编写函数的主要目的是将一个需要很多行代码的复杂问题分解为一系列简单的任务来解决&#xff0c;而且&#xff0c;同一个任务&#xff08;函…

Qt5开发从入门到精通——第十一篇三节(Qt5 事件处理及实例——事件过滤及实例)

提示&#xff1a;欢迎小伙伴的点评✨✨&#xff0c;相互学习c/c应用开发。&#x1f373;&#x1f373;&#x1f373; 博主&#x1f9d1;&#x1f9d1; 本着开源的精神交流Qt开发的经验、将持续更新续章&#xff0c;为社区贡献博主自身的开源精神&#x1f469;‍&#x1f680; 文…

WPF XAML介绍

一、XAML 简介 XAML是一种声明性标记语言&#xff0c;它简化了为.NET Framework应用程序创建UI的过程。在声明性XAML标记中创建可见的UI元素&#xff0c;可以折叠隐藏代码&#xff0c;使程序界面编程更加简单和简洁。 XAML直接以程序集中定义的一组特定后备类型表示对象的实例化…

Oracle Primavera Unifier组合管理器(Portfolio Manager)

目录 一&#xff1a;前言 二&#xff1a;介绍​​​​​​​ 一&#xff1a;前言 Oracle Primavera Unifier uDesigner Portfolio Manager 项目组合管理器是公司的预算员/计划工程师可以收集项目&#xff08;计划和执行中&#xff09;的成本和进度信息&#xff0c;并对“假设…

Webpack 5 超详细解读(六)

51.TerserPlugin 压缩 JS webapck中提供了压缩 js 代码的方式,可以移除无用代码、替换变量名等,减少编译后文件体积,提升加载速度。 不同mode 在 webpack配置文件 webpack.config.js中通过将 mode设置为 development或者 production,会对代码进行不同的处理。 可以发现,…

使用阿里云发送短信验证码

目录 一、用户注册登录流程 二、使用阿里云发送短信验证码 ⭐生成密钥 ⭐将密钥配置到项目中 ⚪新建properties文件并填入相应信息 ⚪pom配置 ​⚪ 测试代码 ⚪添加签名 ​⚪添加短信发送的模板 &#x1f4a7;验证码防盗刷监控 一、用户注册登录流程 二、使用阿里…

Linux服务器更改ssh连接端口

更改ssh连接端口 输入vim /etc/ssh/sshd_config编辑sshd配置 在键盘上按“I”键&#xff0c;进入编辑状态 添加新的远程服务端口&#xff0c;以 222 端口为例。在Port 22下面添加输入Port 222 建议&#xff1a;不要直接修改 22 端口&#xff0c;把Port 22前面的注释符号#删除…

股票买卖Ⅴ

题目描述 给定一个长度为 NNN 的数组&#xff0c;数组中的第 iii 个数字表示一个给定股票在第 iii 天的价格。 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;: 你不能同时参与多笔交…

高精地图_语义地图_众包地图相关论文笔记

1.20220618_LT-mapper: A Modular Framework for LiDAR-based Lifelong Mapping 20213d-Lidar构建long-term地图分为 SLAM模块&#xff08;每个session的点云地图通过关键帧构建&#xff0c;对不同session的关键帧进行anchor node检测&#xff0c;基于anchor帧构建的闭环因子实…

VSCode中Java程序入口的数据输入流的常用形式

1.前言 VSCode需要配置好Java环境&#xff0c;配置链接按官网教程即可&#xff1a;Getting Started with Java in Visual Studio Code VSCode目录./vscode下文件说明如下&#xff1a; setting.json &#xff1a; 配置vscode编辑器特性配置&#xff0c;同时基础Java Project中…

如何避免缓存穿透、缓存击穿、缓存雪崩?

缓存雪崩&#xff1a; 缓存雪崩是指缓存同⼀时间⼤⾯积的失效&#xff0c;所以&#xff0c;后⾯的请求都会落到数据库上&#xff0c;造成数据库短时间内承受⼤量请求⽽崩掉。解决方案&#xff1a; 缓存数据的过期时间设置随机&#xff0c;防⽌同⼀时间⼤量数据过期现象发⽣。…