【图像格式】

RGB是一种基于红、绿、蓝三原色的色彩模型,用于表示计算机图形中的颜色。RGB有多种格式,如RGB555和RGB32,其中RGB32包含额外的Alpha通道以实现透明度。YUV是一种亮度和色度分离的格式,常用于视频编码和压缩,通过不同采样率如4:2:2和4:2:0来节省存储空间。Planar和Packed是两种不同的YUV存储方式,影响数据处理和内存使用。
摘要由CSDN通过智能技术生成

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
  • 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
  • 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
  • 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 
  • 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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值