YUV 颜色编码详解

news2024/12/23 1:18:32

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.coloradmin.cn/o/1894466.html

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

相关文章

Swift Core Data 分阶段迁移

文章目录 前言什么是分阶段迁移?提供一些背景信息创建迁移管理器设置使用 Core Data 栈。总结 前言 在这之前,我发布了一篇文章,在其中解释了如何使用映射模型和自定义迁移策略执行复杂的 Core Data 迁移。虽然这种方法性能良好且运行良好&a…

鸿蒙小案例-自定义键盘

一个自定义键盘 效果 完成简单的26键中英文输入 使用: Entry Component struct IndexInput {State text: string inputController: TextInputController new TextInputController()//自定义键盘关闭事件hideClick(){this.inputController.stopEditing()}//自定义…

自动化设备上位机设计 一

目录 一 设计原型 二 后台代码 一 设计原型 二 后台代码 namespace 自动化上位机设计 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){}} }namespace 自动化上位机设计 {partial class Fo…

GPU相关的一些截图(备查,待整理)

GPU相关的一些截图 这里记录一些与GPU相关的截图,方便查阅

线段树求区间最值问题

引言 今天主要还是练了两道题,是有关线段树如何去求一个区间内的最值问题的,我们可以用线段树来解决。 对应一个无法改变顺序的数组,我们想要去求一个区间内的最值,假设有n个结点,m次询问,暴力的解决办法…

【高校科研前沿】南京地理与湖泊研究所博士后夏凡为第一作者在环境科学与水资源领域Top期刊发文:钙对云南洱海溶解有机质与浮游细菌相互作用的调控作用

文章简介 论文名称:Calcium regulates the interactions between dissolved organic matter and planktonic bacteria in Erhai Lake, Yunnan Province, China 第一作者及单位:夏凡(博士后|中国科学院南京地理与湖泊研究所) 通讯…

关于虚拟机CentOS 7使用ssh无法连接(详细)

虚拟机CentOS 7使用ssh无法连接 猜测:可能是虚拟机软件的网关和和centos7的网关不同导致的问题。 首先打开CentOS7的终端, 输入ifconfig,查看一下系统的ip 打开虚拟机的虚拟网络编辑器, 查看一下网关, 发现确实不一样. 这里有两种方式, 要么修改虚…

fluwx插件实现微信支付

Flutter开发使用fluwx插件实现微信支付,代码量不多,复杂的是安卓和iOS的各种配置。 在 pubspec.yaml 文件中添加fluwx依赖 fluwx: ^4.5.5 使用方法 通过fluwx注册微信Api await Fluwx().registerApi(appId: wxea7a1c53d9e5849d, universalLink: htt…

Android系统集成和使用FFmpeg

文章目录 前言FFmpeg源码下载交叉编译NDK下载x264编译源码下载编译 FFmpeg编译脚本 AOSP继承FFmpeg 前言 原生AOSP中并未继承FFmpeg,所以要想在android上使用,需要自己编译集成。 FFmpeg源码下载 git clone https://git.ffmpeg.org/ffmpeg.git目前最新…

Java [ 基础 ] Stream流 ✨

✨探索Java基础Stream流✨ 在现代Java编程中,Stream是一个非常强大的工具,它提供了一种更高效和简洁的方式来处理集合数据。在这篇博客中,我们将深入探讨Java中的Stream流,介绍它的基础知识、常见操作和一些实用示例。 什么是Str…

暗潮短视频:成都柏煜文化传媒有限公司

暗潮短视频:涌动的新媒体力量 在数字化时代的浪潮中,短视频以其独特的魅力和无限的潜力,迅速成为新媒体领域的一股强大力量。而在这片繁荣的短视频领域中,成都柏煜文化传媒有限公司“暗潮短视频”以其独特的定位和深邃的内容&…

解决mysql数据库连接报错:Authentication plugin ‘caching_sha2_password‘ cannot be loaded

解决mysql数据库连接报错:Authentication plugin ‘caching_sha2_password’ cannot be loaded OperationalError: (2059, “Authentication plugin ‘caching_sha2_password’ cannot be loaded: /usr/lib/mysql/plugin/caching_sha2_password.so: cannot open sha…

虚拟机与主机的联通

本地光纤分配地址给路由器--》连结路由器是连结局域网--》由路由器分配IP地址 因此在网站上搜索的IP与本机的IP是不一样的 1.windows查看主机IP地址 在终端输入 2.linux虚拟机查看ip 3.主机是否联通虚拟机ping加ip

【AI学习】无线AI的问题和挑战

无线AI,即无线人工智能,是指内生于未来(6G)无线通信系统并通过无线架构、无线数据、无线算法和无线应用所呈现出来的新的人工智能技术体系。 最近一直在进行无线AI的调研,感觉真的是路漫漫其修远兮。业界有一些探索&a…

数学建模------Matlab数据可视化

目录 1.plot函数 (1)函数介绍 (2)参数介绍 (3)图形美化 (4)背景更改 (5)多组绘制 (6)图形叠加 (7)添加…

Matplotlib 简介

import matplotlib.pyplot as plt plt.plot([1, 2, 3, 4]) plt.ylabel(some numbers) plt.show() 当使用plot只传入单个数组时,matplotlib会认为这是y的值,并自动生成长度相同,但是从0开始的x值,所以这里的x会自动生成为 [0,1,2,…

Vue.js 案例——商品管理

一.需要做出的效果图&#xff1a; 二.实现的步骤 首先&#xff0c;先建一个项目&#xff0c;命名Table&#xff0c;在Table项目中的components里新建一个MyTable.vue文件。 第二步&#xff0c;在原有的 HelloWorld.vue中写入代码。 HelloWorld.vue代码如下&#xff1a; <…

土地规划与文化遗产保护:在发展浪潮中守护历史的脉络

在这个日新月异的时代&#xff0c;城市化进程如火如荼&#xff0c;土地规划作为引导城市发展方向的关键&#xff0c;承载着平衡发展与保护的重任。在追求现代化的同时&#xff0c;保护文化遗产不仅是对过去的尊重&#xff0c;更是对未来负责。本文旨在深入探讨如何在土地规划实…

云桌面运维工程师

一 深信服驻场工程师 1 深信服AC、AF、AD、NGAF、WOC Atrust、WAF项目实施经验者优先考虑。 负责云桌面POC测试 部署和配置&#xff1a;设置云桌面基础设施&#xff0c;包括虚拟化平台、云桌面管理软件和相关组件。确保正确配置网络、存储和安全设置。 用户体验&#xff1…

7.3数据库第一次作业

安装MySQL 1.打开安装包 2.选择自定义安装&#xff08;custom&#xff09;并点击下一步 3.自定义安装路径 4.点击执行 5.执行成功 6.默认选项点击下一步 7.选择新的授权方式并点击下一步 8.配置密码 9.默认配置并点击下一步 10.点击执行&#xff08;Execute&#xff09; 11.执…