图片、视频由RGB或YUV数据组成
**说明:
1.YUV 家族分为YUV444、YUV422、YUV420
注意:Cb、Cr的含义等同于U、V 即 Y Cb Cr=Y U V
YUV 家谱 |
---|
YUV444 (每一个Y对应一组UV分量) |
YUV422 (每两个Y共用一组UV分量) |
YUV420 (每四个Y共用一组UV分量) |
一、YUV分为YUV444、YUV422、YUV420
1、YUV444数据格式(每个Y用一组UV分量):
w=width //图片宽度
h=high //图片高度
p=w*h //图片像素总数
c=p*3 //数组总长度
数组总长度c=p*3 : 一个像素点是由 YUV 三个分量组成
图片数组:img[c]={Y0,U0,V0,Y1,U1,V1,...,Yp-1,Up-1,Vp-1};
内存分布图:
W=图片宽度w*3
W
+------------------------------+
|Y0,U0,V0,Y1,V1,U1,... |
|... | h
|... |
| |
+------------------------------+
W
img[c]:
bit 1 | bit 2 | bit 3 | … | bit c-2 | bit c-1 | bit c |
---|---|---|---|---|---|---|
Y0 | U0 | V0 | … | Yp | Up | Vp |
代码:
//提取Y U V 值
with=图片宽度
high=图片高度
unsigned char Y[with*high];
unsigned char U[with*high];
unsigned char V[with*high];
for(int i=0;i<with*high;i++)
{
Y[i]=img[(i*3)];
U[i]=img[(i*3)+1];
V[i]=img[(i*3)+2];
}
拓展:YUV444把U和V位置互换就是YVU444
2、YUV422家谱(每两个Y共用一组UV分量)
YUV422 的家谱 |
---|
YUYV (拓展YVYU) |
UYVY(拓展VYUY) |
YUV422P (拓展YVU422P) |
2.1 YUYV数据格式:
w=width //图片宽度
h=high //图片高度
p=w*h //图片像素总数
c=p*2 //数组总长度
d=(w*h)/2 //一半像素
数组总长度c=p*2: 每两个Y共用一组UV分量,比YUV444 节约 1/3 内存
图片数组:img[c]={Y0,U0,Y1,V0,Y2,U1,Y3,V1,...,Yp-2,Ud-1,Yp-1,Vd-1};
内存分布图:
W=图片宽度w*2
W
+-----------------------------------+
|Y0,U0,Y1,V0,Y2,U1,Y3,V1... |
|... | high
|... |
| |
+-----------------------------------+
W
img[c]:
bit 1 | bit 2 | bit 3 | bit 4 | … | bit c-3 | bit c-2 | bit c-1 | bit c |
---|---|---|---|---|---|---|---|---|
Y0 | U0 | Y1 | V0 | … | Yp-2 | Ud-1 | Yp-1 | Vd-1 |
拓展:YUYV把U和V位置互换就是YVYU
2.2 UY