音视频图像篇 YUV-RGB

  • Post author:
  • Post category:其他




1.基础概念


位深

:是指在记录数字图像的颜色时,计算机实际上是用每个像素需要的位深表示,比如红色分量用8bit。

我们看到的彩色图片,都有3哥通道,分别为red,green,blue,透明度alpha。通常每个通道用8bit表示,8bit能表示256种颜色,所以可以组成256x256x256=16777216种颜色。这里的8bit就是位深。

每个通道的位深越大,能够表示的颜色值就越大,


帧率

:在1秒钟时间里传输的图片的帧数,也可以理解为图片处理器每秒钟刷新几次。比如25fps表示一秒钟内有25张图片。


码率

:视频文件在单位时间内使用的数据流量。比如1Mbps。


stride

:指内存中每行像素所占的空间。为了时间内存对齐每行像素中所占的空间并不一定是图像的宽带。



2.RGB、YUV深入讲解



2.0 RGB:红、绿、蓝三基色

在这里插入图片描述



2.1 YUV:Y表示明亮度(luminance或luma),也就是灰阶值,U和V表示的则是色度(chrominance或chroma)

在这里插入图片描述

YUV是一种笼统的说法,针对其他的具体排列方式,可以氛围很多种具体的格式:

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

在这里插入图片描述

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

在这里插入图片描述



2.1.1 YUV采样表示法

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

在这里插入图片描述

(实心代表Y分量,空心代表UV分量)



2.1.2 YUV数据存储

下面以每个分量数据存储在一个char或byte中为例描述YUV的数据的存储方式。

  1. 4:4:4格式

    比如i444(yuv444)格式,对应ffmpeg像素表示AV_PIX_FMT_YUV444P

  2. 4:2:2格式

    在这里插入图片描述

  3. 4:2:0格式

    在这里插入图片描述

    4:2:0格式 NV12

    在这里插入图片描述

    4:2:0格式 其他参考

    在这里插入图片描述



2.3 RGB和YUV的转换

通常情况下RGB和YUV直接的相互转换都是通过接口调用实现,比如ffmpeg的swscale或者libyuv等库。

在这里插入图片描述



2.4 RGB和YUV转换(为什么解码出错显示绿屏?)

在这里插入图片描述



2.5 YUV Stride对齐问题

比如分辨率638×480的YUV420P图像,我们在内存处理的时候如果以16字节对齐,则638不能被16整除,我们需要在每行尾部补充2个字节。就是640。此时该图片的Y stride为640字节
![](https://img-blog.csdnimg.cn/fec3f963becc42bc8ad348d499123d99.png



版权声明:本文为qq_41571224原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。