1. RGB 格式
-
RGB888
- 每像素3字节,分别为R(红)、G(绿)、B(蓝),每个通道8位(0-255)。
- 数据排列:R、G、B依次存储。
- 示例:像素(0, 0, 255)为纯蓝色。
- 分辨率为1920x1080的图片占用字节:1920 x 1080 x 3 = 6,220,800字节(约5.9MB)。
- 优点:色彩还原度高。
- 缺点:体积大,占用存储空间多。
-
RGBA8888
- 在RGB基础上增加Alpha通道(透明度),共4字节。
- 数据排列:R、G、B、A。
2. YUV 格式
-
YUV原理
- Y:亮度(灰度),U/V:色度(色差信号)。
- 优点:利用人眼对亮度敏感、色彩不敏感的特性,便于压缩。
-
YUV常见采样格式:
-
YUV444:Y、U、V每个像素各有一份(无压缩,最高质量)。
-
YUV422:每两个像素共用一份U和V,减少1/3色度数据,常用于视频采集。
-
YUV420:每四个像素共用一份U和V,节省一半空间,主流视频编码使用。
- 典型应用:视频编码(如H.264/H.265)、网络视频传输等。
- 分辨率为1920x1080的图片占用字节:1920 x 1080 x 1.5 = 3,110,400字节(约2.96MB)。
-
-
YUV420常见子格式:
- I420 (YU12) :Y...U...V...
- YV12:Y...V...U...
- NV12:Y...UVUVUV...
- NV21:Y...VUVUVU...
I420内存分布示意图 分辨率为 8x6 的图像,YUV的排布方式。
3.色域与色彩标准
YUV 与 RGB 不同,YUV 每个分量的取值范围由色彩标准(色域)决定。
常用色彩标准
- BT.601 标清(SD),适用于分辨率 720x576(PAL)、720x480(NTSC)等低于1280x720。
- BT.709 高清(HD),适用于分辨率 1280x720、1920x1080。
- BT.2020 超高清(UHD),适用于4K/8K及更高分辨率。
色彩范围
1. 全范围(Full Range)
- Y 分量(亮度) :0 ~ 255
- U/V 分量(色度) :0 ~ 255
2. 有限范围(Limited Range)
- Y 分量:16 ~ 235
- U/V 分量:16 ~ 240
- Full Range 常用于PC图像处理等场景。
- Limited Range 主要用于视频编码与电视、广播标准。
注:在 YUV 与 RGB 转换时,需注意色彩标准与范围的对应。若范围不一致,可能出现色偏或对比度不正常等问题。
以下是常用色域转换公式:
1. BT.601
YUV(Limited Range)→ RGB
C = Y - 16
D = U - 128
E = V - 128
R = 1.164 * C + 1.596 * E
G = 1.164 * C - 0.392 * D - 0.813 * E
B = 1.164 * C + 2.017 * D
RGB→ YUV(Limited Range)
Y = 0.257 * R + 0.504 * G + 0.098 * B + 16
U = -0.148 * R - 0.291 * G + 0.439 * B + 128
V = 0.439 * R - 0.368 * G - 0.071 * B + 128
YUV(Full Range)→ RGB
C = Y
D = U - 128
E = V - 128
R = C + 1.402 * E
G = C - 0.34414 * D - 0.71414 * E
B = C + 1.772 * D
RGB→ YUV(Full Range)
Y = 0.299 * R + 0.587 * G + 0.114 * B
U = -0.168736* R - 0.331264* G + 0.5 * B + 128
V = 0.5 * R - 0.418688* G - 0.081312* B + 128
2. BT.709
YUV(Limited Range)→ RGB
C = Y - 16
D = U - 128
E = V - 128
R = 1.164 * C + 1.793 * E
G = 1.164 * C - 0.213 * D - 0.534 * E
B = 1.164 * C + 2.115 * D
RGB → YUV(Limited Range)
Y = 0.183 * R + 0.614 * G + 0.062 * B + 16
U = -0.101 * R - 0.338 * G + 0.439 * B + 128
V = 0.439 * R - 0.399 * G - 0.040 * B + 128
YUV(Full Range)→ RGB
C = Y
D = U - 128
E = V - 128
R = C + 1.5748 * E
G = C - 0.1873 * D - 0.4681 * E
B = C + 1.8556 * D
RGB → YUV(Limited Range)
Y = 0.2126 * R + 0.7152 * G + 0.0722 * B
U = -0.11457 * R - 0.38543 * G + 0.5 * B + 128
V = 0.5 * R - 0.45415 * G - 0.04585 * B + 128