懒人李冰

记录我的生活、学习

YUV 数据分析

图像的摆放布局各式各样,不同的布局用于不同的场景。简单记录一下常用的几种数据摆放格式。

YUV 数据

对于 YUV 图像来说,会有如下几个特性:FOURCC Format Component Order Image Resolution Interlace/Progressive Packed/Planar

FOURCC包括:UYVY UYNV Y422 IUYV 等等;

Format包括:YUV420 YUV422 YUV444 RGB444 MONO等等:

Component Order包括:YUV YVU

YUV420摆放格式

progressive 的摆放格式如图:

通过 YUV image 的摆放格式可以提取出 Y/U/V 三个分量。tulips_yuv420_prog_planar_qcif.yuv以 Planar、progressive、YUV420、176*144、IYUV(I420)为例,示例代码如下:

splityuvfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
int split_yuv(char *str, uint height, uint width)
{

    FILE *fp;
    FILE *fpy;
    FILE *fpu;
    FILE *fpv;

    unsigned char  *buf = (unsigned char *)malloc(height * width * 3 / 2);

    fp = fopen(str, "r");
    fpy = fopen("y.bin", "wa");
    fpu = fopen("u.bin", "wa");
    fpv = fopen("v.bin", "wa");
    if(!fpv || !fpu || !fpy || !fp){
         fprintf(stderr, "line %d open file error.\n", __LINE__);
        return FALSE;
    }

    fread(buf, 1, height * width * 3 / 2, fp);
    fwrite(buf, 1, height * width , fpy);
    fwrite(buf + height * width, 1, height * width >> 2, fpu);
    fwrite(buf + (uint)(height * width * 5 / 4), 1, height * width >> 2, fpv);

    fclose(fpv);
    fclose(fpu);
    fclose(fpy);
    fclose(fp);
    free(buf);

    return TRUE;
}

上面给出的是 YUV Progressive 的文件,现在对 interlace 文件进行分析。 interlace 的摆放格式如图: