图像是用一个个像素组成的,可以用分辨率来表示图像这个矩形每行每列的像素个数。比如,一张图像的分辨率是wxh,表示这个图像由w行h列个像素组成。像素颜色表示方法有两种,YUV和RGB。
YUV
- 含义
Y:是亮度值,即这个像素的灰度值。
U:色度值,蓝色分量。这个值,怎么计算出的?
V:色度值,红色分量。这个值,怎么计算出的?
每个像素都有YUV三个数据组成,每个数据占一个字节,即3*8=24bit。
- 数据量的简化
由于人眼对亮度敏感,对色度不敏感。所以在一张图像中Y全部保留,相邻几个像素共用一个U和V,便能极大的减少图像的数据量,同时也能表示出图像的色彩。按照这种思想,出现了好几种YUV像素格式,分别有:
YUV444
每个像素都有自己的YUV分量
YUV422
每个像素都有自己的Y分量,每2个像素共用1个U和V
YUV Y YUV Y
YUV420
每个像素都有自己的Y分量,每4个像素共用1个U和V
YV Y YV Y
YUV411
YUV410
3. 存储格式
一帧 mxn 的图像,有多个Y,UV数据,这些数据的排列方式有三种
planner :Y U V 分开存储
UUUUUUUUUUUUUUUUUU UUUUUUUUUUUUUUUUUU
VVVVVVVVVVVVVVVVVVV VVVVVVVVVVVVVVVVVVV
semi-planner : Y单独存储,UV交叉存放
UVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUVUV
packed : YUV 全部交叉存放
YUVYUVYUVYUVYUVYUVYUVYUVYUVYUVYUVYUVYUVYUVYUVYUVYUVYUVYUVYUVYUVYUVYUVYUV
根据像素格式和存储格式,可以对YUV格式进行分类
l420 先U 后V
YV12 先V 后U
NV12 先U 后V, UV UV UV
NV21 先V 后U, VU VU VU
RGB
一帧 mxn 的图像,每个像素都可以用R G B 三原色来表示这个像素的颜色,通过三个颜色组合来表示一种颜色。这三个像素不一定是顺序排列的,可能是RGB, 也可能是BGR。
在实际应用中,RGB存在很多格式。
RGB565
每个像素16个字节,RGB分别占5 6 5个字节
内存高字节->低字节:RRRRR GGGGGG BBBBB
RGB1555
每个像素16个字节,RGB分别占5 5 5个字节
内存高字节->低字节:XRRRRR GGGGG BBBBB(X不用)
RGB24(888)
每个像素24个字节,RGB分别占8 8 8个字节
内存高字节->低字节:BBBBBBBB GGGGGGGG RRRRRRRR
RGB32
每个像素32个字节,RGB分别占8 8 8个字节
内存高字节->低字节:BBBBBBBB GGGGGGGG RRRRRRRR xxxxxxx(X不用)
ARGB32
每个像素32个字节,ARGB分别占8 8 8个字节, A为透明度
内存高字节->低字节:BBBBBBBB GGGGGGGG RRRRRRRR AAAAAAAA
YUV和RGB转换
计算公式是怎么来的?