在网上可以很容易的找到YUV420的视频序列文件,这些文件都以.yuv作为后缀,文件存储的是一段视频的yuv420图像格式的一连串数据。文件中不包含视频和帧的尺寸及其他信息,只是纯图像数据。

 

     首先,先阐释一下YUV420的采样格式。

     其实并不是如字面那样的Y:U:V = 4:2:0,4:2:0并不意味着只有Y(Cb)而没有V(Cr)分量。420是对于每一条扫描线而言的,比如第一行扫描线的Y:U:V = 4:2:0,第二条扫描线的Y:U:V = 4:0:2。对于整幅图的采样来说,Y:U:V = 4:1:1。

 

如下图:

YUV420视频序列文件研究
对于第一行来说,只有U,没有V;对于第二行来说,只有V,没有U;对于整幅图而言,Y:U:V = 4:1:1。

 

      理解了420的采样格式后,就能够很容易地理解序列文件的存储。对于一帧图像来说,文件先写入全部的Y,再写入全部的U,再写入全部的V。值得注意的是,文件以左下角的像素点为起点,从左往右,从下往上写入。写完一帧接着再写下一帧。

 

     另外,因为文件中并不包含尺寸信息,因此没有办法从文件本身获取。一般来说,可以通过文件名来进行判断。常见的几种尺寸如下例:

filename_pal.yuv               720x576
filename _vga.yuv             640x480
filename _cif.yuv               352x288
filename _qcif.yuv             176x144

 

     了解了以上信息后,就可以读出每一帧图像的数据,从而还原一帧图像。还原图像时,如图中每四个像素共用一个U,一个V。

     接下来还可以将YUV转成RGB,并将数据写入位图文件,就可以通过一般的图像工具打开了。

 

附:YUV转RGB转换关系:

                    r = 1.164*(y-16) + 1.596*(cr-128);

                    g = 1.164*(y-16) - 0.813*(cr-128) - 0.392*(cb-128);

                    b = 1.164*(y-16) + 2.017*(cb-12

posted on 2013-07-26 16:32  裴银祥的博客园  阅读(1242)  评论(0编辑  收藏  举报