音视频图片相关基础:
1:rgb 红绿蓝 光的三原色
在RGB中,一幅图像有三个独立的图像平面或通道组成:红,绿,蓝(以及第四个通道透明度)。 RGB(255,23,140)是光的三原色,也即红绿蓝Red、Green、Blue,它们的最大值是255,相当于100%。 白色:rgb(255,255,255) 黑色:rgb(0,0,0) 红色:rgb(255,0,0) 绿色:rgb(0,255,0) 蓝色:rgb(0,0,255) 青色:rgb(0,255,255) 紫色:rgb(255,0,255) 调整相关数字,便可以得到深浅不一的各种颜色
2:YUV (Y’CbCr) 一种像素格式,多用于视频编码/静态图像
Y(相当于灰度)的"亮度"分量 ===>表示亮度 U(蓝色投影 Cb)和 V(红色投影 Cr)的"色度"分量 ===》表示颜色 ==》色度 如果只有Y分量而没有UV分量,就是黑白(灰度)图像,兼容了彩色和黑白电视。 注意:人眼对色度没有那么敏感。
3:YUV 存储方式: 平面格式, 半平面格式, 打包格式
平面格式(planar): 先存储所有的y分量,再存储所有的Cb分量,最后存储所有的Cr分量.
打包格式(packed): Y,Cb,Cr一起存储, ==》这里涉及一些存储方式,以n个样点为准依次存储。
半平面格式(semi planar): 先存储所有的Y分量,后面Cb和Cr分量一起存储.
4: YUV 种类:
空间间:不同空间,即描述一个像素的bit数不同,比如yuv444,yuv422,yuv411,yuv420
==》主要从空间上理解,
如yuv444 表示y u v的个数都是4,
如yuv422,表示y u v的个数是4,2,2 (人眼对色度的不敏感,u和v交错去取)
空间内:相同空间,即描述一个像素的bit数相同,但是存储方式不同,
==》主要从固定像素上去理解:
比如对于yuv420而言,又可细分为yuv420p(yu16/yv16),yuv420sp,nv21,nv12,yv12,yu12,I420
5: 对yuv空间内存储的理解:
其实nv系列,都属于semi-plane系列 这里nv12表示正常的顺序,即uv plane,先是u,然后是v 而nv21表示相反的顺序,即uv plane,先是v,然后是u 同样,nv16和nv61的区别也是仅仅是uv的次序而已。 这里的12和16又代表什么呢?实际上代表的是一个像素所占的位数! 以nv12为例,表示一个像素占用12bit,其中y是定死的占8bit,也就是u占2bit,v占2bit,实际上就是yuv420格式,具体而言是yuv420sp格式 nv16,则表示一个像素占用16bit,其中y是定死的8bit,也即是u占4bit,v占4bit,实际上就是yuv422格式,具体而言是yuv422sp格式
6:为什么视频出问题(解码失败)的时候会显示绿屏?
注意: 在YUV全为0时,图像是绿色的。
图像中不同的颜色编码:
1:YUV —》灰度(亮度)+色差分量
2:RGB —》RGB 三色分量
在YUV全0的时候,图片显示绿色:
理解: 参考:https://www.fourcc.org/fccyvrgb.php YUV和RGB的转换: Y = 0.299 R + 0.587 G + 0.114 B U = -0.1687 R - 0.3313 G + 0.5 B + 128 V = 0.5 R - 0.4187 G - 0.0813 B + 128 R = Y + 1.402 (V-128) G= Y - 0.34414 (U-128) - 0.71414 (V-128) B= Y + 1.772 (U-128)
将YUV的值全0带入公式中,可以得到:
R = 1.402 * (-128) = -126.598 G = -0.34414(-128) - 0.71414(-128) = 44.04992 + 91.40992 = 135.45984 B = 1.772 * (-128) = -126.228
差不多就是R = -126, G = 135, B = -126
其中RGB有取值范围, 都是[0, 255]
所以最后就是R=0, G=135, B=0
查看颜色表:rgb(0,135,0) 差不多就是绿色
参考:https://blog.csdn.net/nwpu053883/article/details/103733537