RGB、YUV视频像素数据处理
一、视频像素数据基础概念RGB RGB是红、绿、蓝三原色,任何颜色都可以通过这三原色按不同比例混合出来。但在科学研究一般不采用RGB颜色空间,因为它的细节难以进行数字化的调整。它将亮度、色调、饱和度三个量放在一起表示,很难分开。YUV 在 YUV 空间中,每一
一、视频像素数据基础概念
RGB
RGB是红、绿、蓝三原色,任何颜色都可以通过这三原色按不同比例混合出来。但在科学研究一般不采用RGB颜色空间,因为它的细节难以进行数字化的调整。它将亮度、色调、饱和度三个量放在一起表示,很难分开。
YUV
在 YUV 空间中,每一个颜色有一个亮度信号 Y,和两个色度信号 U 和 V。亮度信号是强度的感觉,它和色度信号断开,这样的话强度就可以在不影响颜色的情况下改变,占用的存储空间对于RGB也较小。
本质区别
ARGB:
属于 RGB 色彩模型 的变种,包含透明度通道(Alpha)。
直接表示颜色,通过红(R)、绿(G)、蓝(B)三原色的组合描述像素,Alpha(A)通道控制透明度。
主要用于图像处理、图形渲染(如 PNG 图片、UI 设计)。
YUV:
属于 亮度-色度分离模型,将颜色信息分为亮度(Y)和色度(U、V)。
设计初衷是为了兼容黑白电视(仅需 Y)与彩色电视(Y+UV),同时节省带宽(通过子采样,如 YUV420)。
广泛用于视频编码(如 H.264/MPEG)、电视信号和摄像头采集。
转换关系
ARGB ↔ YUV 可以相互转换,但需通过公式计算(非直接对应)。
RGB → YUV:
亮度(Y)是 R/G/B 的加权和,色度(U/V)是颜色与亮度的差值。例如:
Y = 0.299R + 0.587G + 0.114B
U = 0.492(B - Y)
V = 0.877(R - Y)
YUV → RGB:
通过逆运算还原 R/G/B,例如:
R = Y + 1.140V
G = Y - 0.395U - 0.581V
B = Y + 2.032U
注意:转换时需处理色彩空间(如 BT.601/BT.709)和范围(全范围/有限范围)。
二、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_555 | 1280 x 720 x 2 = 1.75M |
RGB_565 | 1280 x 720 x 2 = 1.75M |
ARGB_8888 | 1280 x 720 x 4 = 3.50M |
ARGB_4444 | 1280 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_444 | 1280 x 720 x 3 = 2.64M |
YUV_422 | 1280 x 720 x 2 = 1.75M |
YUV_411 | 1280 x 720 x 1.5 = 1.32M |
YUV_420 | 1280 x 720 x 1.5 = 1.32M |
四、小知识:机去拍摄一张图片,这个图片是直接生成的RGB吗?
图像数据并不是直接生成RGB格式,而是经历了一个从传感器原始数据(通常是RAW或YUV)到最终RGB(如JPEG/PNG)的转换过程
摄像头传感器
│
├─ RAW数据(Bayer阵列) → ISP去马赛克 → RGB → 后处理 → 存储为JPEG(转YCbCr)/PNG(RGB)
│
└─ YUV数据(默认) → ISP直接处理 → RGB → 后处理 → 存储为JPEG(转YCbCr)/PNG(RGB)
五、处理YUV数据
利用处理YUV数据可以将YUV数据进行分离,变成灰度图,亮度减半,加边框,等等一系列操作。
具体的代码实现及示例:参照雷神的帖子:YUV数据处理

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)