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万色,是8bit的64倍。
常见的颜色还是
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的转换
- 通常情况下
RGB和YUV直接的相互转换都是调用接口实现,比如FFmpeg的swscale或者libyuv等库 - 主要转换标准是
BT601和BT7098bit位深情况下TV range是16-235(Y)、16-240(UV),也叫Limited RangePC range是0-255,也叫Full Range- 而
RGB没有range之分,全是2-255
BT601 TV Range转换公式

从YUV转到RGB如果值小于0要取0,如果大于255要取255
5.1 为什么解码出错显示绿屏
因为RGB和YUV的转换的时候,解码失败时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*480的YUV420P图像
我们已经知道YUV420P的存储格式是如下图所示的

我们在内存处理的时候如果要以16字节对齐,所以所有的Y的数量要能被16整除,
则638不能被16整除,我们需要在每行尾部填充2个字节动画就是640,此时该图片的Y stride为640字节。

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





![[论文总结]YOLO v1、YOLO v2、YOLO v3、YOLO v4、YOLOv5](https://img-blog.csdnimg.cn/883af388b4ce4f1e94e381079c6fba26.png)








![商业海外社交媒体营销10步指南 [2023]](https://img-blog.csdnimg.cn/img_convert/ec6d5dd11ec57e4b36919ac308f113cb.png)




