当前位置: 首页 > news >正文

【音视频】RGB、YUV基础

一、RGB与YUV基础

RGB和YUV都是表示图像的两种格式

  • RGB:红(Red)绿(Green)蓝(Blue)
  • YUV:Y表示亮度(Luminance),也就是灰阶值,和V表示的则是色度(Chrominance)

1.1 RGB

这里我们介绍一下RGB的排列方式。通常的图像像素是按照RGB的顺序进行排序的,但有些图像处理要转成其他顺序,比如OpenCV中经常要转换为BGR格式的排列方式。

  • 这里的一个像素就是三个色度表示,按照相应的排列方式循环下去。

在这里插入图片描述

1.2 YUV

与RGB类似,YUV也是一种颜色编码方式,它是指将亮度参量(Y,Luminance)和色度参量UV(Chrominance)分开进行表示的像素编码格式。

  • 这样分开的好出手不但可以避免相互干扰,没有UV信息也一样可以显示完整的图像,因而解决了彩色电视与黑白电视的兼容问题;还可以降低色度的采样率而不会对图像的质量影响太大,降低了视频信号传输时对频宽(带宽)的要求。
    在这里插入图片描述

1.2.1 YUV排列方式

YUV是一个比较笼统的说法,针对它的具体排列方式,可以分为很多种具体的格式:

  • 打包(packed)格式:将每个像素点的Y、U、V分量交叉排列并以像素点为单元连续的存放在一组数组中,通常几个相邻的像素组成一个宏像素(macro-pixel)

在这里插入图片描述

  • 平面(planar)格式:使用三个数组分开连续的存放Y、U、V三个分量,即Y、U、V三个分量存放在各自的数组中。

在这里插入图片描述

1.2.2 YUV采样表示法

YUV采用A:B:C表示法来描述YUV采样频率比例,下图黑点表示采样像素点Y分量,空心圆表示采样像素点UV分量。主要是YUV4:4:4、YUV4:2:2和YUV4:2:0这几种常用的类型

在这里插入图片描述

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

1.2.3 YUV数据存储

1.2.3.1 YUV数据存储-4:4:4格式
  • 比如I444(YUV444)格式,对应ffmpeg像素表示AV_PIX_FMT_YUV444

在这里插入图片描述

1.2.3.2 YUV数据存储-4:2:2格式
  • 比如I422(YUV422)格式,对应ffmpeg像素表示AV_PIX_FMT_YUV422

在这里插入图片描述

1.2.3.3 YUV数据存储-4:2:0格式
  • 比如I420(YUV420)格式,对应ffmpeg像素表示AV_PIX_FMT_YUV420
    在这里插入图片描述
1.2.3.4 YUV数据存储-4:2:0格式排列

YUV420格式常见有以下几种排列方式,主要是UV分量排列方式的差别:

在这里插入图片描述

1.3 RGB和YUV的转换

通常情况下,RGB和YUV可以直接相互转换,一般可以直接调用ffmpeg的swscale函数或者libyuv库来进行转换。

主要转换标准是BT601和BT709。

  • BT601 TV Range转换公式,计算RGB和YUV的互转
    在这里插入图片描述在这里插入图片描述

从YUV转换为RGB如果值小于0要取0,同样,大于255要取255

  • 在RGB和YUV转换的时候,如果出现转换失败,则YUV所有分量都是0,因此,转换为RGB的分量数值如下:
    在这里插入图片描述
    如图,只有G通道有数值,因此,在转换失败后,会显示绿屏

1.4 YUV Stride对齐问题

比如分辨率638*480的YUV图像,我们在内存处理的时候要以16字符对齐,则638不能被16整除,我们需要在每行尾部填充2个字节,也就是640,以Y分量为例,此时该图片的Y stride为640字节。

即如下:

  • YYYYYY
    UUUU
    VVVV

在这里插入图片描述

同样U、V分量也有同样的对齐要求


http://www.mrgr.cn/news/92955.html

相关文章:

  • 【软件测试】论坛系统功能测试报告
  • 【Python · PyTorch】循环神经网络 RNN(基础应用)
  • 2024年第十五届蓝桥杯大赛软件赛省赛Python大学A组真题解析《更新中》
  • 完美解锁便捷版!
  • 专业工具,提供多种磁盘分区方案
  • C++STL---<limits>
  • 机器学习的三个基本要素
  • 第十四届蓝桥杯大赛软件赛国赛C/C++大学C组
  • Maven的传递性、排除依赖、生命周期、插件
  • 内置序列,专业版已破!
  • 《HarmonyOS Next × ArkTS框架:从AI模型压缩到智能家居控制的端侧开发指南》
  • GIT工具学习【1】:基本操作
  • 虚拟机Linux操作(持续更新ing)
  • 【UCB CS 61B SP24】Lecture 17 - Data Structures 3: B-Trees学习笔记
  • torch.einsum 的 10 个常见用法详解以及多头注意力实现
  • Skynet入门(一)
  • 直装永久授权,最新专业版集成VB7
  • JavaScript 进阶A(作用域、闭包、变量和函数提升、函数相关只是、数组解构、对象解构、构造函数
  • go类(结构体)和对象
  • 快速排序算法详解