音视频基础 - YUV和RGB

news2024/11/26 14:56:10

1. 音视频名词概念

1.1 像素

像素是一张图片的基础单位,pixel,简称px
无数个像素组合在一起,就形成了一张图片。

在这里插入图片描述

1.2 分辨率

分辨率 = 垂直像素*水平像素,(理论上) 图像的分辨率越高,图像就越清晰。
比如下面左边这张图,胶乳一个方块就代表一个像素点,那么分辨率就是15px*16px,最终我们看到的就是很小的一张图片。

在这里插入图片描述

实际上分辨率高不一定图像就越清晰,因为可能图片本身就是模糊的

1.3 位深

我们看到的彩色图片,都有三个通道,分别为红®、绿(G)、蓝(B)通道。
(如果需要透明度则还有alpha分量)

通常每个通道用8bit表示,8bit能表示256种颜色,所以可以组成256*256*256=16777216=1677万种颜色

这里的8bit就是我们讲的位深。

在这里插入图片描述

每个通道的位深越大,能够表示的颜色值就越大。比如现在高端电视说的10bit色彩,即是每个通道用10bit表示,每个通道有1024种颜色。1024*1024*1024约为107374万色,是8bit64倍。

常见的颜色还是8bit居多

1.4 帧率

帧率即FPS,每秒有多少帧画面。 帧率越高就代表画面越流程,越低则越卡顿。

由于视觉图像在视网膜的暂时停留,图像帧率能达到24帧,我们就认为图像是连续动态的。

  • 电视帧率一般是24FPS
  • 电视剧一般是25FPS
  • 监控行业常用25FPS
  • 音视频通话常用15FPS

帧率越高,画面越流程,需要的设备性能也越高 (涉及到编码解码)。

1.5 码率

  • 视频文件在单位时间使用的数据流量,比如1Mbps
  • 大多数情况下码率越高,也就越清晰。但模糊的视频文件大小(码率)也可以很大,分辨率小的视频文件可能也不分辨率打的视频文件清晰。
  • 对于同一个原始图像源的时候,同样的编码算法,则码率越高,图像的失真就会越小,视频画面就会越清晰。

2. RGB、YUV的区别

  • RGB : 红色R、绿色G、蓝色B三基色
  • YUV : Y表示明亮度(Luminance或Luma),也就是灰阶值,U和V表示的则是色度(Chrominance或Chroma)

2.1 RGB

通常的图像像素是按RGB顺序进行排列,但有些图像处理要转成其他顺序,比如OpenCV经常转成BGR的排列方式。

在这里插入图片描述

2.2 YUV

RGB类似,YUV也是一种颜色编码方法,它是指将亮度参数Y(Luma)和色度参数U和V (Chroma)分开进行表示的像素编码格式。

这样分开的好处就是不但可以避免互相干扰,没有UV信息一样可以显示完整的图像,因而解决了彩色电视和黑白电视的兼容问题,还可以降低色彩的采样率而不会对图像质量影响太大,降低了视频信号传输时对宽频(带宽)的要求

  • 降低色彩的采样率而不会对图像质量影响太大 : YY共用一组UV分量 (根据YUV类型决定)

在这里插入图片描述
YUV是一个比较笼统地说法,针对它的具体排列方式,可以分为很多种

  • 打包(packed)格式 : 将每个像素点的Y、U、V分量交叉排列并以像素点为单位连续的存放在同一数组里,通常几个相邻的像素组成一个宏像素 (macro-pixel)
  • 平面(planar)格式 : 使用三个数组分开连续的存放Y、U、V三个分量,即Y、U、V分别存放在各自的数组中

在这里插入图片描述

3. YUV采样表示法

YUV采用A:B:C表示来描述Y、U、V采样频率比例

下图中黑点表示采样像素点Y分量,空心圆表示采样像素点UV分量。

在这里插入图片描述

  • 4:4:4 表示色度频道没有下采样 : 即一个Y分量对应着一个U分量和一个V分量
  • 4:2:2 表示2:1的水平下采样,没有垂直下采样,即每两个Y分量共用一个U分量和一个V分量
  • 4:2:0 表示2:1的水平下采样,2:1的垂直下采样,即每四个Y分量共用一个U分量和一个V分量

4. YUV数据存储

4.1 YUV数据存储 4:4:4格式

比如YUV444格式,对应FFmpeg像素表示AV_PIX_FMT_YUV444P,占24bit

在这里插入图片描述

4.2 YUV数据存储 4:2:2格式

比如YUV422P格式,对应FFmpeg像素表示AV_PIX_FMT_YUV422P,占16bit
在这里插入图片描述

4.3 YUV数据存储 4:2:0格式

最常用的一种格式,比如YUV420P格式,对应FFmpeg像素表示AV_PIX_FMT_YUV420P,占12bit

在这里插入图片描述

比如NV12格式,对应FFmpeg像素表示AV_PIX_FMT_NV12

在这里插入图片描述

4:2:0格式参考
在这里插入图片描述

I420也叫做YU12,在android平台下叫作I420格式
android手机从摄像头采集的预览数据一般都是NV21

5. RGB和YUV的转换

  • 通常情况下RGBYUV直接的相互转换都是调用接口实现,比如FFmpegswscale或者libyuv等库
  • 主要转换标准是BT601BT709
    • 8bit位深情况下
      • TV range16-235(Y)16-240(UV),也叫Limited Range
      • PC range0-255,也叫Full Range
      • RGB没有range之分,全是2-255

BT601 TV Range转换公式

在这里插入图片描述

从YUV转到RGB如果值小于0要取0,如果大于255要取255

5.1 为什么解码出错显示绿屏

因为RGBYUV的转换的时候,解码失败时YUV分量都填为0值,然后根据公式 :

R = 1.402 * (-128) = -126.598
G = -0.34414 * (-128) - 0.71414*(-128) = 135.45984
B = 1772 * (-128) = -126.228

RGB值范围为[0,255],所以最终的值为 :

R = 0
G = 135.45984
B = 0

此时只有G分量有值所以为绿色

6. YUV Stride对齐问题

比如分辨率638*480YUV420P图像
我们已经知道YUV420P的存储格式是如下图所示的
在这里插入图片描述
我们在内存处理的时候如果要以16字节对齐,所以所有的Y的数量要能被16整除,
638不能被16整除,我们需要在每行尾部填充2个字节动画就是640,此时该图片的Y stride640字节。
在这里插入图片描述

7. 其他

本文为看以下视频的学习笔记
音视频开发零基础系列-图像篇YUV-RGB-上|YUV的格式YUV的采样方式YUV的存储方式RGB 到 YUV的转换
音视频开发零基础系列-图像篇YUV-RGB-下|YUV的格式YUV的采样方式YUV的存储方式RGB 到 YUV的转换

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

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

相关文章

【链表OJ】链表的回文结构

⭐️ 往期相关文章 💫链接1:链表分割 💫链接2:链表中倒数第k个结点(快慢指针问题) 💫链接3:leetcode 876.链表的中间结点(快慢指针问题) 💫链接4:leetcode 206.反转链表 &#x1f4…

游游画U(秒用c++ string函数)

看到这道题&#xff0c;第一反应是简单的模拟&#xff0c;上手就写&#xff0c;后来看大佬代码&#xff0c;还是我太蠢了 我的&#xff1a; #include <bits/stdc.h> using namespace std; typedef long long LL;int main() {int n;cin>>n;string s ""…

【Spark】RDD转换算子

目录 map mapPartitions mapPartitionsWithIndex flatMap glom groupBy shuffle filter sample distinct coalesce repartition sortBy ByKey intersection union subtract zip partitionBy reduceByKey groupByKey reduceByKey 和 groupByKey 的区别 a…

kafka的broker和replica和文件存储

zookeeper中存储的kafka信息 /brokers/ids&#xff0c;记录存在的服务器id/brokers/topics/test/partitions/0/state&#xff0c;记录leader和可用副本服务器/comsumers&#xff0c;0.9版本之前存储消费者的offset信息&#xff0c;但是会产生zookeeper和broker的跨节点通信/co…

SPSS读取数据文件(一)

1.读取Excel数据文件 &#xff08;1&#xff09;选择“文件”-“打开”-“数据”,在弹出的“打开数据”对话框下选择Excel文件&#xff0c;如图所示 &#xff08;2&#xff09;选择要打开的Excel文件&#xff0c;点击“打开”&#xff0c;如图所示 &#xff08;3&#xff09;可…

[论文总结]YOLO v1、YOLO v2、YOLO v3、YOLO v4、YOLOv5

背景 在这里我们主要介绍YOLO 系列的相关目标检测算法&#xff0c;从最开始的YOLO v1 一直到 YOLO v5。本文也借鉴了其他文档和原始论文。总结下来这五个方法的演进线路如下表格所示。 对比维度YOLO v1YOLO v2YOLO v3YOLO v4YOLO v5backboneVGGdarknet19darknet53darknet53da…

Lua学习笔记:浅谈对垃圾回收的理解

前言 本篇在讲什么 Lua的垃圾回收 本篇适合什么 适合初学Lua的小白 本篇需要什么 对Lua语法有简单认知 依赖Sublime Text编辑器 本篇的特色 具有全流程的图文教学 重实践&#xff0c;轻理论&#xff0c;快速上手 提供全流程的源码内容 ★提高阅读体验★ &#x1f…

Unity:sentinel key not found (h0007)

SSD换电脑&#xff0c;unity 编辑器无法打开&#xff1b; 具体步骤&#xff1a; 删除这个路径下的文件 C:\ProgramData\SafeNet 下 Sentinel LDK 打开Windows 的Cmd 命令行&#xff0c;输入编辑器版本下Unity.exe的路径&#xff0c; CD E:\Dev_Env\Unity\Hub\Editor\2020.3.3…

如何将 arduino-esp32 库作为 ESP-IDF 组件使用?

相关文档 arduino-esp32 SDKESP-IDF SDKESP-IDF 软件环境搭建说明Arduino 软件环境使用说明Arduino as an ESP-IDF component &#xff08;官方说明&#xff09; 环境准备 目前&#xff0c;最新 Master 版本的 arduino-esp32 SDK 要求使用 v4.4 版本的 ESP-IDF SDK 软件编译环…

05、Nginx反向代理

一、网关、代理与反向代理&#xff1a; 在Nginx中&#xff0c;网关、代理和反向代理是三种常见的功能&#xff0c;用于转发和处理请求。下面是它们的简要介绍&#xff1a; 网关&#xff08;Gateway&#xff09;&#xff1a; 网关在网络通信中起到中介的作用&#xff0c;将客户…

【视觉SLAM入门】1. 基础知识,运动观测,旋转(旋转矩阵,轴角,欧拉角,四元数)和eigen库基础

"山薮藏疾" 1. 运动与观测1.1 通用运动方程1.2 通用观测方程1.3 对SLAM的认识 2. 三维运动2.1 旋转与平移2.2 变换矩阵2.3 矩阵知识补充2.4 旋转向量2.5 欧拉角2.6 四元数2.7 其他变换 3. 编程基础3.1 链接库说明3.2 eigen库 注&#xff1a; 以后的方程中如未说明&am…

面试官:一千万的数据,要怎么查?

一个老生常谈的问题&#xff0c;SELECT *和SELECT具体字段那个快&#xff1f;在数据量少的时候可能没什么差别&#xff0c;但是数据量达到千万级&#xff0c;差距就显现出来。废话不多说&#xff0c;往下看 ↓。 SELECT * 和 SELECT 具体字段的区别 在 MySQL 中&#xff0c;SE…

批量规范化

✨✨✨ 感谢优秀的你打开了小白的文章 “希望在看文章的你今天又进步了一点点&#xff0c;生活更加美好&#xff01;”&#x1f308;&#x1f308;&#x1f308; 目录 1.批量规范化基本原理 2.批量规范化的使用 2.1对于全连接层 2.2对于卷积层 3.代码实现 3.1方式一 …

26488-24-4,Cyclo(D-Phe-L-Pro),具有良好的生物相容性

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ 【产品描述】 Cyclo(D-Phe-L-Pro)环(D-苯丙氨酸-L-脯氨酸)&#xff0c;环二肽是由两个氨基酸通过肽键环合形成&#xff0c;是自然界中小的环状肽。由于其存在两个酰胺键即四个可以形成氢键的位点&#xff0c;环二肽可以在氢…

商业海外社交媒体营销10步指南 [2023]

如今&#xff0c;社交媒体是任何成功商业战略的重要组成部分。这不是奢侈品&#xff0c;而是必需品。全球有超过 36 亿人使用社交媒体&#xff0c;它是企业展示其产品和服务、建立品牌知名度以及与客户联系的数字游乐场。 但这不仅仅是娱乐和游戏。要在社交媒体上取得成功&…

Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组

目录 329. 矩阵中的最长递增路径 Longest Increasing Path In A Matrix &#x1f31f;&#x1f31f; 330. 按要求补齐数组 Patching Array &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日…

数据结构--二叉树的性质

数据结构–二叉树的性质 二叉树常考性质 常见考点1: 设非空二叉树中度为0、1和2的结点个数分别为 n 0 、 n 1 和 n 2 &#xff0c;则 n 0 n 2 1 n_0、n_1和n_2&#xff0c;则n_0 n_2 1 n0​、n1​和n2​&#xff0c;则n0​n2​1 n 0 n 2 1 \color{red}n_0 n_2 1 n0​n2​…

图层中大型数据集的分块处理思路

图层中大型数据集的分块处理思路 为改善要素叠加工具&#xff08;如联合和相交&#xff09;的性能和可伸缩性&#xff0c;软件采用了称为自适应细分处理的运算逻辑。当可用的物理内存不足以对数据进行处理时&#xff0c;就会触发系统使用此逻辑。由于保持在物理内存的可用范围…

助力企业完成等保2.0的重要工具

在当今数字化时代&#xff0c;企业面临着越来越多的网络安全威胁和数据泄露风险。为了保护敏感信息和维护业务的连续性&#xff0c;许多企业正在积极采取措施来实施等保2.0标准。在这一过程中&#xff0c;EventLog Analyzer作为一种全面的安全信息与事件管理解决方案&#xff0…

swagger2word使用(将swagger2转化为word)

开源项目地址 https://github.com/JMCuixy/swagger2word 项目使用 1、项目拉下来以后先修改application.xml配置文件红框内容&#xff0c;将其修改为要换为自己swagger文档的地址 2、运行项目后输入地址http://127.0.0.1:8080/toWord 即可下载word文档