YUV 颜色编码详解

YUV 简介

YUV是被欧洲电视系统所采用的一种颜色编码方法(属于PAL),是PAL和SECAM模拟彩色电视制式采用的颜色空间。在现代彩色电视系统中,通常采用三管彩色摄影机或彩色CCD摄影机进行取像,然后把取得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号R-Y(即U)、B-Y(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这种色彩的表示方法就是所谓的YUV,采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的.

YUV 即是一种表示色彩模型。基于人类眼睛对亮度高度敏感、对颜色敏感度低于亮度的生理特征 YUV在对照片或视频编码时完整保存像素的亮度分量(Y),根据不同要求采样保存UV分量。

YUV 将亮度和色度分离,使用Y(明亮度)、U和V(色度、浓度)三个分量表示一个颜色(图1),三个分量中UV分量只有颜色信息,如果图像只有Y分量图像就是黑白图像(图2)。

(图1)

(图2)

不同的YUV采样格式和存储大小

YUV 图像的主流采样方式有如下三种 (有的博客称这种采样方式为 “空间-间 数据划分”,弄的名字云里雾里的,吐了…):

YUV 4:4:4 采样

YUV 4:2:2 采样

YUV 4:2:0 采样

一个像素点, Y、U、V每个分量占用8bit位(=1byte字节),下面的计算假设图像像素为1920*1080。

YUV 4:4:4 采样,意味着 Y、U、V 三个分量的采样比例相同,因此在生成的图像里,每个像素的三个分量信息完整,Y、U、V分别都是 8 bit,

也就是一个像素里占用3个字节存储, 那该图片内存大小为总像素乘以3:

Y U V

size= (192010801) + (192010801) + (192010801) = 1920*1080 * 3

YUV 4:2:2 采样,意味着 UV 分量是 Y 分量采样的一半,Y 分量和 UV 分量按照 2:1 的比例采样。如果水平方向有 8 个像素点,那么采样了 8 个 Y 分量,而只采样了 4 个 UV 分量。

也就是一个像素里占用2个字节存储,那该图片内存大小为总像素乘以2:

Y U V

size= (19201080 * 1) + (192010800.5) + (192010800.5) = 19201080 * 2

YUV 4:2:0 采样,并不是指只采样 U 分量而不采样 V 分量。而是指,在每一行扫描时,只扫描一种色度分量(U 或者 V),和 Y 分量按照 2:1 的方式采样。比如,第一行扫描时,YU 按照 2:1 的方式采样,那么第二行扫描时,YV 分量按照 2:1 的方式采样。对于每个色度分量来说,它的水平方向和竖直方向的采样和 Y 分量相比都是 2:1。

对于每个Y、U、V分量用8比特量化的视频来说,每个由2x2个2行2列相邻的4个像素组成的宏像素需要占用6字节内存。1920x1080的图像,其中每个像素点都有Y分量,其中四分之一的像素点含有U分量,其中四分之一的像素点含有V分量,

所以总共占用字节为

size = 19201080 1 + 19201080 0.25 + 19201080 0.25 (这个公式里0.25是按照宏像素来计算) = 192010801.5

注: 采样通常用3部分的比例表示J🅰️b(例如4:2:2)。如果有alpha通道,也用4个数的比例(例如4:2:2:4)

YUV 存储格式

YUV 数据有三种存储格式(有的博客称这种采样方式为 “空间-内 数据划分”…):

平面格式(planar format): 即先存储Y平面,再存储U平面,再存储V平面;

semi-planar:先存储Y平面,再存储UV平面;

打包格式(packed format):即先存储一个YUV,再存储下一个YUV;

YUV420 类型

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

420P(YU12): 也叫I420, 安卓的模式,YUV 分量分别依次存放,先是 w * h 长度的 Y(Y平面),后面跟 w * h * 0.25 长度的 U(U平面), 最后是 w * h * 0.25 长度的 V(V平面),存储大小为 w * h * 1.5

420P(YV12) : 和I420唯一不同,YVU分量依次存放, 先是 w * h 长度的 Y(Y平面),后面跟 w * h * 0.25 长度的V(V平面), 最后是 w * h * 0.25 长度的 U(U平面),存储大小为 w * h * 1.5

YUV420SP: 又叫bi-planer或two-planer双平面,Y一个平面,UV在同一个平面交叉存储。

420SP(NV12) : 12代表先U再V,然后交替存储, 即 YYYYUVUVUV… (IOS 只有这一种模式).

420SP(NV21) : 21代表先V再U, 然后交替存储,即 YYYYVUVUVU… (安卓的模式)

NV系列都属于semi-plane系列。

YUV422 类型

YUV422各种存储格式如下

针对上图中的NV12、NV21、NV16、NV61说明:

◆NV:NV系列都属于semi-plane系列,NV的“12”、“16”代表先U后V,NV的“21”、“61”代表先V后U

◆ 12、16:代表一个像素占的位数

YUV和 RGB 转换

RGB:即red,green,blue三色存储空间,因音视频主要用的是YUV的色彩空间,感兴趣的小伙伴可以拓展下RGB相关知识,本文不再详述。介绍下RGB和YUV的转换公式:

◆ RGB 转 YUV:

Y = 0.299R + 0.587G + 0.114B

U= -0.147R - 0.289G + 0.436B

V = 0.615R - 0.515G - 0.100B

◆ YUV 转 RGB:

R = Y + 1.14V

G = Y - 0.39U - 0.58V

B = Y + 2.03U

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

硬件开发笔记(二十三):贴片电阻的类别、封装介绍,AD21导入贴片电阻原理图封装库3D模型

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140110514 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

ConsiStory:无需训练的一致性文本到图像生成技术

随着大规模文本到图像(T2I)扩散模型的发展,用户可以更自由地通过文本指导图像生成过程。然而,要在不同的提示中保持同一主题的视觉一致性仍然是一个挑战。现有的方法通常需要对模型进行微调或预训练,以教授新词汇来描述…

arthas命令使用

dashboard(线程、内存等环境概览) jvm(JVM相关信息概览) 1、RUNTIME(系统运行环境JVM相关信息,运行时长等) 2、CLASS-LOADING(类加载信息) 3、 COMPILATION(编译信息) 4…

论文学习——基于类型检测的动态自适应多目标优化算法

论文题目:Dynamic adaptive multi-objective optimization algorithm based on type detection 基于类型检测的动态自适应多目标优化算法(Xingjuan Cai a,b, Linjie Wu a,∗, Tianhao Zhao a, Di Wu c, Wensheng Zhang d, Jinjun Chen e)Inf…

Spring启动时,将SpringContext设置到Util中(SpringContextUtil)

场景 在Spring应用开发中,为简化代码或者在静态方法中获取Spring应用的上下文,需要把SpringContext设置到类属性上。经过对源码的分析和实践,使用Spring的事件监听器监听ApplicationPreparedEvent事件是最佳的方式。 通过ApplicationPrepar…

深入理解 Git `git add -p` 命令中的交互选项

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

git使用遇到的问题记录

文章目录 1. 记录以下问题*error: RPC failed; HTTP 307 curl 22 The requested URL returned error: 307* 1. 记录以下问题 error: RPC failed; HTTP 307 curl 22 The requested URL returned error: 307 第一种:clone的仓库地址或者账户密码发生改变;…

Python学习篇:Python基础知识(三)

目录 1 Python保留字 2 注释 3 行与缩进 ​编辑4 多行语句 5 输入和输出 6 变量 7 数据类型 8 类型转换 9 表达式 10 运算符 1 Python保留字 Python保留字(也称为关键字)是Python编程语言中预定义的、具有特殊含义的标识符。这些保留字不能用作…

商务视频推广8个增加用户转化率的技巧-华媒舍

商务视频推广是一种有效的营销策略,可以帮助企业吸引更多的潜在客户并增加用户转化率。我们将介绍8个提高商务视频推广效果的技巧,帮助您更好地利用视频来促进业务增长。 技巧一:制作高质量的内容 成功的商务视频推广首先要有高质量的内容。…

Web3 开发者入门手册:技能、工具和职业前景

原文:https://remote3.co/blog-post/how-to-become-a-web3-developer 作者:Paul Anderson 编译:TinTinLand Web3 是 2024 年科技领域最受瞩目的话题之一——Web3 令人激动的实用潜力可以跨越多个行业,早期采用者更有机会在未来…

iOS手机竖着拍的照片被旋转了90°的原因以及解决方案

EXIF.getData(IMG_FILE, function () { // IMG_FILE为图像数据 var orientation EXIF.getTag(this, “Orientation”); console.log(“Orientation:” orientation); // 拍照方向 }); 获取拍照方向的结果为1-8的数字: 注意:对于上面的八种方向中&a…

nginx的重定向(rewrite)

nginx的重定向(rewrite) location 匹配 location匹配的就是后面的URI /wordpress 192.168.60.20/wordpress location匹配的分类和优先级 1、精确匹配 location / 对字符串进行完全匹配,必须完全符合 2、正则匹配 ^~ 前缀匹配&#x…

ACE Studio的成功经验:从国内到全球的市场拓展

在AI技术飞速发展的今天,音乐创作也正经历着一场前所未有的变革。作为这一变革的前沿代表,ACE Studio无疑引起了广泛关注。本文将通过对时域科技创始人Joe与曲凯的对话,深入探讨ACE Studio的创新理念、市场定位、技术优势以及未来发展方向。 …

一个R包完成单细胞基因集富集分析 (全代码)

singleseqgset是用于单细胞RNA-seq数据的基因集富集分析的软件包。它使用简单的基础统计量(variance inflated Wilcoxon秩和检验)来确定不同cluster中感兴趣的基因集的富集。 Installation library(devtools) install_github("arc85/singleseqgse…

【JavaEE】多线程代码案例(2)

🎏🎏🎏个人主页🎏🎏🎏 🎏🎏🎏JavaEE专栏🎏🎏🎏 🎏🎏🎏上一篇文章:多线程代码案例(1)&a…

花键参数确定的流程是怎么样的?

继续花键的话题,今天跟小伙伴们一同学习一下:渐开线花键的参数确定的一般流程及基本方法。 前面有好几篇介绍了花键的基本参数的概念,包括规格、模数、齿数、压力角等等。以及花键的定心方式,内外花键的配合方式。那么这些参数的…

基于docker轻松部署selenium grid环境

做web自动化的同学都知道selenium grid非常好用,但是环境配置特别麻烦,很多人都躺在了环境搭建。那么有没有更简单的方式呢,答案是肯定的,今天我们就用docker来完成它,希望对大家有帮助。 一、环境准备 准备一台 Linu…

6个步骤实现Postman接口压力测试(建议收藏)

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 这里讲是postman做接口并发测试,基础用法不做赘述 1、第一步接口可以通的情况下点击…

Web应用防火墙用在哪些场景?

WAF是Web Application Firewall的缩写,翻译为“Web应用防火墙”是一种网络安全设备或服务,用于保护Web应用程序免受各种网络攻击和漏洞的影响。 WAF特别设计用于识别和阻止特定于Web应用程序的攻击,例如SQL注入、跨站脚本(XSS)、跨站请求伪造…