1、RGB方式表示颜色
真彩色是指图像中的每个像素值都分成R(红)、G(绿)、B(蓝)三个基色分量,每个基色分量直接决定其基色的强度,这样产生的色彩称为彩色。彩色图像是一种用三个或更多字节描述像素的计算机图像存储方式。
普遍认为人眼对色彩的分辨能力大致是一千万色,因此由RGB888形成的图像称作真彩色。RGB888真彩色,每一色光以8位表示,每个通道各有256级阶调,三色光交互增减,RGB三色光能在一个像素上最高显示24位1677万色(256*256*256=16,777,216),这个数值就是电脑中所能表示的最高色彩。
RGB332(3+3+2=8位色):(2^3)*(2^3)*(2^2) = 8*8*4 = 256(256 Color).俗称256色。
RGB555(5+5+5=15位色):(2^5)*(2^5)*(2^5) = 32*32*32 = 32768(32768/1024 = 32,32K Color),俗称32千色。
RGB565(5+6+5=16位色 ):(2^5)*(2^6)*(2^5) = 32*64*32 = 65536(65536/1024 = 64,64K Color),俗称65千色。
RGB666(6+6+6=18位色):(2^6)*(2^6)*(2*6) = 64*64*64 = 262144(262144/1024 = 256, 256K Color).俗称262千色.
RGB888(8+8+8=24位色):(2^8)*(2^8)*(2^8) = 256*256*256 = 16777216(16777216/1024 = 16384,16384K Color ; 16384/1024 = 16 , 16M Color。) 俗称16兆真彩色。
RGB888+8(8+8+8+8=32位色);
除了24位真彩色,现在还出现了32位真彩色(RGB888+8)。32位真彩色并非是2的32次方的发色数,它其实是1677万多色,不过它增加了8位共256阶颜色的灰度,为了方便称呼,就规定它为32位色。它是24位发色数再加上256阶灰度等级。
在我们的计算机中图像是以RGB888格式显示图像的,24位图每个像素保存了32bit的数据,即RGB888+Alpha,Alpha就是半透明填充字节……但是对于真彩的图像而言,肉眼在16bit的时候已经难以分辨了,因此,有些时候,可以讲RGB888转换为RGB565来存储,减少了存储器的容量的同时,降低了数据量;在后端显示的时候,再次把RGB565转换为RGB888,实现数据宽度的匹配!!
总结:
- RGB有RGB565和RGB888,ARGB等多种子分类
- RGB的本质:将色度分解为R(红)、G(绿)、B(蓝)三部分,每一个像素永这三种纯基色来表示,然后记录下亮度数据
- RGB的优势:方便数字化表达,广泛用于数字化彩色显示器,计算机编程等领域。
- RGB的劣势:和传统的灰度图兼容不好,表达颜色的效率不高
2、YUV方式表示颜色
YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,YUV分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。只有Y就是黑白图像,再加上UV就是彩色图像了。没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。并且,YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。
2.1 存储方式
YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0
用三个图来直观地表示采集的方式吧,以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量。
先记住下面这段话,以后提取每个像素的YUV分量会用到。
- YUV 4:4:4采样,每一个Y对应一组UV分量。
- YUV 4:2:2采样,每两个Y共用一组UV分量。
- YUV 4:2:0采样,每四个Y共用一组UV分量。
2.2 planar和packed
对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
对于packed的YUV格式,每个像素点的Y,U,V是连续交*存储的。
在YUV420中,一个像素点对应一个Y,一个4X4的小方块对应一个U和V。对于所有YUV420图像,它们的Y值排列是完全相同的,因为只有Y的图像就是灰度图像。YUV420sp与YUV420p的数据格式它们的UV排列在原理上是完全不同的。420p它是先把U存放完后,再存放V,也就是说UV它们是连续的。而420sp它是UV、UV这样交替存放的。(见下图) 有了上面的理论,我就可以准确的计算出一个YUV420在内存中存放的大小。 width * hight =Y(总和) U = Y / 4 V = Y / 4。所以YUV420 数据在内存中的长度是 width * hight * 3 / 2,
假设一个分辨率为8X4的YUV图像,它们的格式如下图,为YUV420sp:
YUV420p数据格式如下图:
2.3 YUV文件大小计算
以720×488大小图象YUV420 planar为例,其存储格式是: 共大小为(720×480×3>>1)字节,
分为三个部分:Y,U和V
Y分量: (720×480)个字节
U(Cb)分量:(720×480>>2)个字节
V(Cr)分量:(720×480>>2)个字节
三个部分内部均是行优先存储,三个部分之间是Y,U,V 顺序存储。即:
0--720×480字节是Y分量值,
720×480--720×480×5/4字节是U分量
720×480×5/4 --720×480×3/2字节是V分量。
参考:
https://blog.csdn.net/asahinokawa/article/details/80596655
https://blog.csdn.net/baidu_38988793/article/details/91045843