RGB、YUV视频像素数据处理

一、视频像素数据基础概念

RGB

      RGB是红、绿、蓝三原色,任何颜色都可以通过这三原色按不同比例混合出来。但在科学研究一般不采用RGB颜色空间,因为它的细节难以进行数字化的调整。它将亮度、色调、饱和度三个量放在一起表示,很难分开。

YUV

      在 YUV 空间中,每一个颜色有一个亮度信号 Y,和两个色度信号 U 和 V。亮度信号是强度的感觉,它和色度信号断开,这样的话强度就可以在不影响颜色的情况下改变,占用的存储空间对于RGB也较小。

二、YUV&RGB种类详解

RGB常见种类(一个像素的RGB的表示方式)

RGB_555:
      用16个bit表示一个像素,最高位不用,5个bit表示R(红色),5个bit表示G(绿色),5个bit表示B(蓝色),那么一个屏幕像素点占1+5+5+5=16位,共2个字节。
在这里插入图片描述
RGB_565:
      用16个bit表示一个像素,5个bit表示R(红色),6个bit表示G(绿色),5个bit表示B(蓝色),那么一个屏幕像素点占5+6+5=16位,共2个字节。
在这里插入图片描述
ARGB_8888:
      用32个bit表示一个像素,8个bit表示A(透明度), 8个bit表示R(红色),8个bit表示G(绿色),8个bit表示B(蓝色) ,那么一个屏幕像素点占8+8+8+8=32位,共4个字节,注意ARGB的排列顺序是BGRA在解析数据时要注意。
在这里插入图片描述
ARGB_4444:
      用16个bit表示一个像素,4个bit表示A(透明度), 4个bit表示R(红色),4个bit表示G(绿色),4个bit表示B(蓝色) ,那么一个屏幕像素点占4+4+4+4=16位,共2个字节。
在这里插入图片描述
举例一个1280*720的图片对于这几种编码格式的图片大小:

RGB种类图片大小
RGB_5551280 x 720 x 2 = 1.75M
RGB_5651280 x 720 x 2 = 1.75M
ARGB_88881280 x 720 x 4 = 3.50M
ARGB_44441280 x 720 x 2 = 1.75M
YUV常见种类

常见YUV图像格式是由采样格式+存储格式共同决定的,如NV21、YV12、I420、YUY2等。

采样格式:

      人眼对亮度(Y分量)的敏感度远远大于颜色(UV分量)的敏感度,所以丢弃某些UV分量,图像在肉眼中的感觉不会起太大的变化,主流的采样方式有四种,分别为YUV4:4:4,YUV4:2:2,YUV4:1:1,YUV4:2:0(常用常见)。

存储格式:

Planar平面格式:指先连续存储所有像素点的 Y 分量,然后存储 U 、V 分量。
Packed打包格式:指每个像素点的 Y、U、V 分量是连续交替存储的。
在这里插入图片描述I420(YU12)和YV12都是YUV420P类型即先存储 Y 分量,再存储 U、V 分量,区别在于:I420 是先 Y 再 U 后 V,而 YV12 是先 Y 再 V 后 U 。
在这里插入图片描述
NV21、NV12 属于 YUV420SP 类型(IOS中有的类型)。即先存储了 Y 分量,再UV 分量交替存储。区别在于:NV12 是UV交替,而 NV21 是VU交替。
在这里插入图片描述

三、YUV采样格式

      主要的YUV采样格式为YUV4:4:4,YUV4:2:2,YUV4:1:1,YUV4:2:0(常用),下面以图形化方式讲解。

YUV4:4:4
      YUV三个信道的抽样率相同,每个像素点的三个分量信息完整,每个分量用8bit表示,平均一个像素点占用3个字节。
在这里插入图片描述Y:实心圆、U:空心圆 、V:交叉线
假如图像像素为:
[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
那么采样的码流为:
Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
最后映射出的像素点依旧为:
[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]

YUV4:2:2
      U、V分量是Y分量的抽样率一半,每个像素点对应一个Y分量,水平方向每两个相邻像素点,抽取第一个像素点的U分量,抽取第二个像素点的V分量,则平均一个像素点占用2个字节。
在这里插入图片描述
Y:实心圆、U:空心圆 、V:交叉线
假如图像像素为:
[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
那么采样的码流为:
Y0 U0 Y1 V1 Y2 U2 Y3 V3
其中,每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一个采集一个
最后映射出的像素点为
[Y0 U0 V1]、[Y1 U0 V1]、[Y2 U2 V3]、[Y3 U2 V3]

YUV4:1:1
      U、V分量是Y分量的抽样率1/4,每个像素点对应一个Y分量,水平方向每四个相邻像素点,抽取第一个像素点的U分量,抽取第三个像素点的V分量,则平均一个像素点占用1.5个字节。
在这里插入图片描述
Y:实心圆、U:空心圆 、V:交叉线
假如图像像素为:
[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
那么采样的码流为:
Y0 U0 Y1 Y2 V2 Y3
最后映射出的像素点为 :
[Y0 U0 V2]、 [Y1 U0 V2] 、[Y2 U0 V2]、 [Y3 U0 V2]

YUV4:2:0
      U、V分量是Y分量的抽样率1/4,每个像素点对应一个Y分量,按行扫描,相邻两行中第一行每2个相邻像素点抽取第一个像素点的U分量,第二行每2个相邻像素点抽取第一个像素点的V分量,则平均一个像素点占用1.5个字节。
在这里插入图片描述
Y:实心圆、U:空心圆 、V:交叉线
假设图像像素为:
[Y0 U0 V0]、[Y1 U1 V1]、 [Y2 U2 V2]、 [Y3 U3 V3]
[Y4 U4 V4]、[Y5 U5 V5]、[Y6 U6 V6]、 [Y7 U7 V7]
那么采样的码流为:
Y0 U0 Y1 Y2 U2 Y3 Y4 V4 Y5 Y6 V6 Y7
其中,每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一行按照 2 : 1 进行采样
最后映射出的像素点为:
[Y0 U0 V5]、[Y1 U0 V5]、[Y2 U2 V7]、[Y3 U2 V7]
[Y5 U0 V5]、[Y6 U0 V5]、[Y7 U2 V7]、[Y8 U2 V7]

举例:
那么对不同类型的YUV来说一个1280*720的图像有多大呢?

YUV种类图片大小
YUV_4441280 x 720 x 3 = 2.64M
YUV_4221280 x 720 x 2 = 1.75M
YUV_4111280 x 720 x 1.5 = 1.32M
YUV_4201280 x 720 x 1.5 = 1.32M

四、RGB与YUV类型的转换

R = Y + 1.402 (V-128)
G = Y - 0.34414 (U-128) - 0.71414 (V-128)
B = Y + 1.772 (U-128)
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

五、处理YUV数据

      利用处理YUV数据可以将YUV数据进行分离,变成灰度图,亮度减半,加边框,等等一系列操作。
具体的代码实现及示例:参照雷神的帖子:YUV数据处理

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值