当前位置:   article > 正文

【图像格式】_图像格式 rgb

图像格式 rgb

1、RGB

1) 介绍

RGB代表红、绿、蓝三个通道的颜色。三原色的颜色值的范围都是再0~255,所以每一个颜色用1个字节=8个bit可完全在计算机内部表示出来。在计算机可表示的颜色数量有28 *28 28

2) 表现形式

浮点表现形式:取值范围为0.0~1.0(在OpenGL中对每个子像素点表示就是这个表现形式)
整数表示:取值范围为0 ~ 255或者00 ~ FF(如RGBA_8888、RGB_565)

3) RGB格式

(1)RGB555
RGB555是最高位不使用,R、G、B分别占5位,每个像素用2个字节(16 个 bit)表示。

高字节                     低字节
空 R R R R R G G G G G B B B B B
  • 1
  • 2
  • R = color & 0x7C00 //获取高字节5个bit
  • G = color & 0x03E0 //获取中间的5个bit
  • B = color & 0x001F //获取低字节5个bit

(2)RGB555
RGB555是R、G、B分别占5、6、5位,每个像素用2个字节(16 个 bit)表示。

高字节                     低字节
R R R R R G G G G G G B B B B B
  • 1
  • 2
  • R = color & 0xF800 //获取高字节5个bit
  • G = color & 0x07E0 //获取中间的6个bit
  • B = color & 0x001F //获取低字节5个bit

(3)RGB24(24=8+8+8)
RGB555是R、G、B分别占8位,每个像素用3个字节(24 个 bit)表示。

高字节                                    低字节
R R R R R R R R G G G G G G G G B B B B B B B B
  • 1
  • 2
  • R = color & 0x0000FF //获取高字节8个bit
  • G = color & 0x00FF00 //获取中间的8个bit
  • B = color & 0xFF0000 //获取低字节8个bit

(4)RGB32(32=8+8+8+8)
RGBA是代表Red(红色)Green(绿色)Blue(蓝色)和Alpha的色彩空间。如果一个像素的alpha通道数值为0%,那它就是完全透明的(也就是看不见的),而数值为100%则意味着一个完全不透明的像素(传统的数字图像)。在0%和100%之间的值则使得像素可以透过背景显示出来,就像透过玻璃(半透明性),这种效果是简单的二元透明性(透明或不透明)做不到的。

高字节                                                    低字节
R R R R R R R R G G G G G G G G B B B B B B B B A A A A A A A A 
  • 1
  • 2
  • R = color & 0x0000FF00 //获取高字节8个bit
  • G = color & 0x00FF0000 //获取中间的8个bit
  • B = color & 0xFF000000 //获取次低字节8个bit
  • A = color & 0x000000FF //获取低字节8个bit

2、YUV

1) YUV介绍

yuv是指亮度和色度分开表示的像素格式。其中Y表示亮度,U和V表示色度。

2) YUV采样

色度通道的采样率可以低于亮度通道,而不会显著降低感知质量。
4:4:4 表示完全取样。
4:2:2 表示2:1的水平取样,垂直完全采样。
4:2:0 表示2:1的水平取样,垂直2:1采样。

  1. YUV4:4:4
    完全取样,每个像素都有独立的Y/U/V值。
    YUV444
  2. YUV4:2:2
    每两个Y共用一对U/V值
    YUV422
    一张1280 * 720大小的图片,在YUV 4:2:2采样时的大小为:

(1280 * 720 * 8 + 1280 * 720 * 0.5 * 8 * 2)/ 8/1024/1024 = 1.76 MB。

看到YUV 4:2:2采样的图像比RGB模型图像节省了三分之一的存储空间,在传输时占用的带宽也会随之减少。
3. YUV4:2:0
每四个Y共用一对U/V值,,并不是指只采样U分量而不采样V分量。而是指,在每一行扫描时,只扫描一种色度分量(U或者V),和Y分量按照2: 1的方​​式采样。比如,第一行扫描时,YU按照2:1的方式采样,那么第二行扫描时,YV分量按照2:1的方式采样。对于每个色度分量来说,它的水平方向和竖直方向的采样和Y分量相比都是2:1。
YUV420
假设第一行扫描了V分量,那么需要扫描两行才能够组成完整的UV分量。四个Y分量是共用了一套UV分量,而且是按照2 * 2的小方格的形式分布的,相比YUV 4:2:2采样中两个Y分量共用一套UV分量,这样更能够节省空间。
一张1280 * 720大小的图片,在YUV 4:2:0采样时的大小为:

(1280 * 720 * 8 + 1280 * 720 * 0.25 * 8 * 2)/ 8/1024/1024 = 1.32 MB。

可以看到YUV 4:2:0采样的图像比RGB模型图像节省了一半的存储空间,因此它也是比较主流的采样方式。

2) planar format

  1. Packed

将YUV三个分量的素数值放在同一个阵列中,存储为单个阵列宏像素,将每个像素点的Y/U/V连续交叉存储以UYVY、YUYV为例,由两个像素的Y/U/V组成一个宏像素,依次排列

UYVY(YUV422):
U0Y0V0Y1 U2Y2V2Y3 U4Y4V4Y5 U6Y6V6Y7 …
UYVY
YUYV(YUV422):
Y0U0Y1V0 Y2U2Y3V2 Y4U4Y5V4 Y6U6Y7V6 …
YUYV
上诉2 image pixels的所占字节大小为4个字节。

  1. plannar

每个分量存储为单独的数组,最终图像是三个单独平面的整合。
YU12和YV12格式都属于YUV 420P类型,即先存储Y分量,再存储U,V分量,区别在于:YU12是先Y再U后V,而YV12是先Y再V后U。

YV12(YUV420p):
YV12
YU12(YUV420p):又叫I420
width: 图像分辨率的宽
height: 分辨率高
n = width * height
m = width * height / 4
Y0Y1Y2Y3Y4Y5…Yn U0U1U2U3…Um V0V1V2V3…Vm
I420

  1. Semi-Plannar
    介于Pakced和Planar之间,即Y分量为一个阵列,UV交叉存储。

NV12(YUV420sp):是IOS中有的模式
width: 图像分辨率的宽
height: 分辨率高
n = width * height
m = width * height / 4
Y0Y1Y2Y3Y4Y5…Yn U0V0U1V1U2V2U3V3…UmVm
NV12
NV21(YUV420sp):安卓中有的模式
NV21

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/126168
推荐阅读
相关标签
  

闽ICP备14008679号