音视频色彩:RGB/YUV

目录

1.RGB

 1.1介绍       

1.2分类

1.2.1RGB16

1)RGB565

2)RGB555

1.2.2RGB24

1.2.3RGB222 

2.YUV

2.1介绍

2.2分类

2.2.1 YUV444 

2.2.2 YUV 422 

2.2.3 YUV 420 

 2.3存储格式

2.3.1 YUYV

2.3.2 UYVY

2.3.3 YUV 422P

2.3.4 YUV420P/YUV420SP

2.3.5 YU12 和 YU21

2.3.6 NV12 和 NV21

3. YUV 与 RGB 转换


1.RGB

 1.1介绍       

        RGB是一种颜色标准,指的是R(red)红色、G(green)绿色、B(blue)蓝色这三种颜色,所有的颜色是通过对这三种颜色通道的变化以及相互之间的叠加来得到的,是目前运用最广的颜色系统之一。

1.2分类

1.2.1RGB16

        RGB16就是用16位(2个字节)作为一个存储单元,实现一个RGB像素的存储

1)RGB565

        RGB565就是R占比5位,G占比6位,B占比5位

高字节     ------->     低字节
R R R R R G G G G G G B B B B B
2)RGB555

        RGB555就是最高位不使用,R占比5位、G占比5位、B占比5位

高字节      ------->     低字节
空 R R R R R G G G G G B B B B B

1.2.2RGB24

        与RGB16不同,RGB24将RGN分为3份,每一份占比8位,先排列B,再排列G,最后排列R

高字节              ------->             低字节
B B B B B B B B G G G G G G G G R R R R R R R R 空 空 空 空 空 空 空 空

1.2.3RGB222 

        RGB222是一种8位的RGB格式,各分量占用2bit位,剩下的2bit位不用,这种格式一般用于灰度图。

2.YUV

2.1介绍

1)YUV是指亮度参量和色度参量分开表示的像素格式.

        其中“Y”表示明亮度(Luminance或Luma),也就是灰度值;

        而“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

2)YCbCr其中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量。
        一般人们所讲的YUV大多是指YCbCr。

2.2分类

叉子表示Y;圆圈表示UV

2.2.1 YUV444 

        YUV 4:4:4 表示 Y、U、V 三分量采样率相同,即每个像素的三分量信息完整,都是 8bit,每个像素占用 3 个字节。

四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
采样的码流为: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
映射出的像素点为:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

2.2.2 YUV 422 

        YUV 4:2:2 表示 UV 分量的采样率是 Y 分量的一半

四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
采样的码流为: Y0 U0 Y1 V1 Y2 U2 Y3 U3
映射出的像素点为:[Y0 U0 V1]、[Y1 U0 V1]、[Y2 U2 V3]、[Y3 U2 V3]

       其中,每采样一个像素点,都会采样其 Y 分量,而 U、V 分量都会间隔采集一个,映射为像素点时,第一个像素点和第二个像素点共用了 U0、V1 分量,以此类推。从而节省了图像空间。

比如一张 1920 * 1280 大小的图片,采用 YUV 4:2:2 采样时的大小为:

(1920 * 1280 * 8 + 1920 * 1280 * 0.5 * 8 * 2 ) / 1024 / 1024 = 4.68M

        可以看出,比 RGB 节省了三分之一的存储空间。

2.2.3 YUV 420 

        YUV 4:2:0 并不意味着不采样 V 分量。它指的是对每条扫描线来说,只有一种色度分量以 2:1 的采样率存储,相邻的扫描行存储不同的色度分量。也就是说,如果第一行是 4:2:0,下一行就是 4:0:2,在下一行就是 4:2:0,以此类推。

图像像素为:
[Y0 U0 V0]、[Y1 U1 V1]、 [Y2 U2 V2]、 [Y3 U3 V3]
[Y5 U5 V5]、[Y6 U6 V6]、 [Y7 U7 V7] 、[Y8 U8 V8]
​
采样的码流为:
Y0 U0 Y1 Y2 U2 Y3 
Y5 V5 Y6 Y7 V7 Y8
​
映射出的像素点为:
[Y0 U0 V5]、[Y1 U0 V5]、[Y2 U2 V7]、[Y3 U2 V7]
[Y5 U0 V5]、[Y6 U0 V5]、[Y7 U2 V7]、[Y8 U2 V7]

        其中,每采样一个像素点,都会采样 Y 分量,而 U、V 分量都会隔行按照 2:1 进行采样。

一张 1920 * 1280 大小的图片,采用 YUV 4:2:0 采样时的大小为:

(1920 * 1280 * 8 + 1920 * 1280 * 0.25 * 8 * 2 ) / 8 / 1024 / 1024 = 3.51M

 2.3存储格式

2.3.1 YUYV

        YUYV 格式属于 YUV422,采用打包格式进行存储,Y 和 UV 分量按照 2:1 比例采样,每个像素都采集 Y 分量,每隔一个像素采集它的 UV 分量。

Y0 U0 Y1 V0 Y2 U2 Y3 V2

2.3.2 UYVY

        UYVY 也是 YUV422 采样的存储格式中的一种,只不过与 YUYV 排列顺序相反。

U0 Y0 V0 Y1 U2 Y2 V2 Y3

2.3.3 YUV 422P

        YUV422P 属于 YUV422 的一种,它是一种 planer 模式,即 Y、U、V 分别存储。

2.3.4 YUV420P/YUV420SP

        YUV420P 是基于 planar 平面模式进行存储,先存储所有的 Y 分量,然后存储所有的 U 分量或者 V 分量。

        同样,YUV420SP 也是基于 planar 平面模式存储,与 YUV420P 的区别在于它的 U、V 分量是按照 UV 或者 VU 交替顺序进行存储。

2.3.5 YU12 和 YU21

        YU12 和 YV12 格式都属于 YUV 420P 类型,即先存储 Y 分量,再存储 U、V 分量,区别在于:YU12 是先 Y 再 U 后 V,而 YV12 是先 Y 再 V 后 U 。

2.3.6 NV12 和 NV21

        NV12 和 NV21 格式都属于 YUV420SP 类型。它也是先存储了 Y 分量,但接下来并不是再存储所有的 U 或者 V 分量,而是把 UV 分量交替连续存储。

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

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

3. YUV 与 RGB 转换

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

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

相关文章

百卓Smart管理平台 uploadfile.php 文件上传漏洞【CVE-2024-0939】

百卓Smart管理平台 uploadfile.php 文件上传漏洞【CVE-2024-0939】 一、 产品简介二、 漏洞概述三、 影响范围四、 复现环境五、 漏洞复现手动复现小龙验证Goby验证 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工…

【Linux】vim的基本操作与配置(上)

Hello everybody!今天我们要进入vim的讲解了。学会了vim,咱们就可以在Linux系统上做一些简单的编程啦! 那么废话不多说,咱们直接进入正题! 1.初识vim vim是一款多模式的文本编辑器,可以对一个文件进行编辑操作。 它一共有三个模…

Visual Studio 2022中创建的C++项目无法使用万能头<bits/stdc++.h>解决方案

目录 发现问题 解决办法 第一步 第二步 第三步 第四步 最后一步 问题解决 发现问题 如果大家也遇到下面这种问题,可能是没有include文件夹中没有bits/stdc.h 解决办法 第一步 打开一个C项目,鼠标移动至头文件上右击,选择转到文档或…

Docker Compose 构建 LNMP 环境:一站式 PHP 网站部署指南

Docker Compose 构建 LNMP 环境:一站式 PHP 网站部署指南 简介环境准备和安装安装 Docker安装 Docker Compose准备项目目录结构 编写 Docker Compose 文件基础结构配置 Nginx 服务配置 PHP 服务配置 MySQL 服务完整的 docker-compose.yml 示例 Nginx 容器配置创建 N…

微信自动预约小程序开发指南:从小白到专家

随着互联网的发展,小程序已经成为了一个备受欢迎的在线预约平台。本文将详细介绍如何使用第三方制作平台,如乔拓云网,来搭建一个从入门到精通的预约小程序。 首先,我们需要登录乔拓云网,并选择一个适合自己的小程序模板…

PdfFactory Pro软件下载以及序列号注册码生成器

PdfFactory Pro注册机是一款针对同名虚拟打印机软件所推出的用户名和序列号生成器。PdfFactory Pro是一款非常专业的PDF虚拟打印软件,通过使用这款注册机,就能帮助用户免费获取注册码,一键激活,永久免费使用。 pdffactory7注册码如…

Node.js之npm单独与批量升级依赖包的方式

Node.js之npm单独与批量升级依赖包的方式 文章目录 Node.js之npm单独与批量升级依赖包的方式npm查看与升级依赖包1. 单独安装或升级最新版本2. 查看依赖但不升级1. npm outdated2. npm update 3. 批量升级新版本4. npm-check-updates1. 全局安装2. ncu查看可升级的版本3. 升级依…

购物车商品数量为0判断是否删除

当编辑商品的数量为1,再减的话,我们搞个模态提示,让用户决定是否要删除这个商品? //商品数量的编辑功能handleItemNumEdit(e){const {operation,id}e.currentTarget.dataset;console.log(operation,id);let {cart}this.data;let …

特征工程:特征提取和降维-下

目录 一、前言 二、正文 Ⅰ. 流形学习 Ⅱ.t-SNE Ⅲ.多维尺度分析 三、结语 一、前言 通过上篇对线性与非线性的数据的特征提取和降维的学习之后,我们来介绍其他方法,分别有流行学习、多维尺度分析、t-SNE。 二、正文 Ⅰ. 流形学习 流形学习是借鉴拓…

《向量数据库指南》——Milvus Cloud「删除」:眼见未必为实

“执行 Collection 中的 delete 操作后,再次调用 num_entities 检查集合中的数据的条数,和删除前一致, delete 不能从物理层面上删除数据吗?”“删除的数据还能被查到是为什么?”“请问下删除 collection 后,磁盘大小没有恢复,该怎么处理?”社区中关于“删除”讨论最多…

MyBatisPlus基础操作之增删改查

目录 一、基本使用 1.1 插入数据 1.2 删除操作 1.3 更新操作 二、条件构造器Wrapper 2.1 常用AbstractWrapper方法 2.1.1 示例一 2.2.2 示例二 2.2.3 示例三 2.2 常用QueryWrapper方法 2.2.1 示例一 2.2.2 示例二 2.2.3 示例三(常用) 2.3 常…

浅谈垃圾回收、内存泄漏与闭包

什么是垃圾? 在js中,垃圾通常指的是不再被程序使用的内存或对象。也就是说,垃圾是指程序中分配的内存空间或对象,但不再被程序使用或无法被访问到的内容 function createIncrease() {const doms new Array(100000).fill(0).map((…

形态学算法之边界提取的简单python实现——图像处理

原理 图像处理中的边界提取是一项基本而重要的任务,主要用于识别和提取图像中物体的轮廓或边界。 具体流程 1.边缘检测 边界提取的第一步通常是边缘检测。边缘是图像亮度变化显著的地方,是物体与背景或不同物体间的分界线。边缘检测算法通过识别图像中…

EMC学习笔记(二十一)降低EMI的PCB设计指南(一)

降低EMI的PCB设计指南(一) 1.概述2.射频3.连接器与过孔元件4.静态引脚和动态引脚和输入5.基本回路6.差模与共模 tips:资料主要来自网络,仅供学习使用。 1.概述 印刷电路板(PCB)的一般布局准则,基本上都有相对的文件进…

2024.02.07作业

请编程实现二叉树的操作 1.二叉树的创建 typedef struct a {char data;struct a* lchild;struct a* rchild; } *Node;Node create_node() {Node node (Node)malloc(sizeof(struct a));if (NULL node){return NULL;}node->lchild NULL;node->rchild NULL;return …

springboot165科研工作量管理系统的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

Java图形化界面编程——Container容器 笔记

2.3 Container容器 2.3.1 Container继承体系 Winow是可以独立存在的顶级窗口,默认使用BorderLayout管理其内部组件布局;Panel可以容纳其他组件,但不能独立存在,它必须内嵌其他容器中使用,默认使用FlowLayout管理其内部组件布局;S…

CPP项目:Boost搜索引擎

1.项目背景 对于Boost库来说,它是没有搜索功能的,所以我们可以实现一个Boost搜索引擎来实现一个简单的搜索功能,可以更快速的实现Boost库的查找,在这里,我们实现的是站内搜索,而不是全网搜索。 2.对于搜索…

寒假漫游记之CSS

一&#xff0c;CSS 1.CSS语法规范 CSS规则由两个主要的部分构成&#xff1a;选择器及一条或多条声明。 &#xff08;选择器是用于指定CSS样式的HTML标签&#xff09; 注&#xff1a;CSS是写在<style></style>里 (style在<head></head>),具体可以书写…

STM32——LCD(1)认识

目录 一、初识LCD 1. LCD介绍 2. 显示器的分类 3. 像素 4. LED和OLED显示器 5. 显示器的基本参数 &#xff08;1&#xff09;像素 &#xff08;2&#xff09;分辨率 &#xff08;3&#xff09;色彩深度 &#xff08;4&#xff09;显示器尺寸 &#xff08;5&#xff…