YUV格式

作者: 一半浮沉 | 来源:发表于2019-09-27 11:13 被阅读0次

    1,YUV420P

    若视频帧的宽和高分别为w和h
    1,一帧YUV420P像素数据一共占用w*h*3/2 Byte的数据;
    2,其中前w*h Byte存储Y;
    3,接着的w*h*1/4 Byte存储U;
    4,最后w*h*1/4 Byte存储V。
    
    eg:
    先有一张分辨率为256x256图片,其中:
    1,纯Y数据,分辨率为256x256;
    2,纯U数据,分辨率为128x128;
    3,纯V数据,分辨率为128x128;
    

    如果想把YUV格式像素数据变成灰度图像,只需要将U、V分量设置成128即可。
    这是因为U、V是图像中的经过偏置处理的色度分量。色度分量在偏置处理前的取值范围是-128至127,这时候的无色对应的是“0”值。经过偏置后色度分量取值变成了0至255,因而此时的无色对应的就是128了。

    2,YUV444P

    若视频帧的宽和高分别为w和h
    1,一帧YUV444P像素数据一共占用w*h*3 Byte的数据;
    2,前w*h Byte存储Y;
    3,接着的w*h Byte存储U;
    4,最后w*h Byte存储V;
    
    eg:
    先有一张分辨率为256x256图片,其中
    1,Y,U,V各数据,分辨率为256x256
    

    3,BMP格式:BMP采用的是小端(Little Endian)存储方式。这种存储方式中“RGB24”格式的像素的分量存储的先后顺序为B、G、R。由于RGB24格式存储的顺序是R、G、B,所以需要将“R”和“B”顺序作一个调换再进行存储。

    BMP组成 |
    ---|---
    BITMAPFILEHEADER |
    BITMAPINFOHEADER |
    RGB像素数据 |

    typedef  struct  tagBITMAPFILEHEADER
    { 
    unsigned short int  bfType;       //位图文件的类型,必须为BM 
    unsigned long       bfSize;       //文件大小,以字节为单位
    unsigned short int  bfReserverd1; //位图文件保留字,必须为0 
    unsigned short int  bfReserverd2; //位图文件保留字,必须为0 
    unsigned long       bfbfOffBits;  //位图文件头到数据的偏移量,以字节为单位
    }BITMAPFILEHEADER; 
    typedef  struct  tagBITMAPINFOHEADER 
    { 
    long biSize;                        //该结构大小,字节为单位
    long  biWidth;                     //图形宽度以象素为单位
    long  biHeight;                     //图形高度以象素为单位
    short int  biPlanes;               //目标设备的级别,必须为1 
    short int  biBitcount;             //颜色深度,每个象素所需要的位数
    short int  biCompression;        //位图的压缩类型
    long  biSizeImage;              //位图的大小,以字节为单位
    long  biXPelsPermeter;       //位图水平分辨率,每米像素数
    long  biYPelsPermeter;       //位图垂直分辨率,每米像素数
    long  biClrUsed;            //位图实际使用的颜色表中的颜色数
    long  biClrImportant;       //位图显示过程中重要的颜色数
    }BITMAPINFOHEADER;
    

    4,RGB转YUV

    Y= 0.299*R+0.587*G+0.114*B
    U=-0.147*R-0.289*G+0.463*B
    V= 0.615*R-0.515*G-0.100*B
    
    **注意公式的由来,参考前两节
    

    在转换的过程中有以下几点需要注意:

    1) RGB24存储方式是Packed,YUV420P存储方式是Packed。
    2) U,V在水平和垂直方向的取样数是Y的一半。
    

    参考链接

    相关文章

      网友评论

          本文标题:YUV格式

          本文链接:https://www.haomeiwen.com/subject/gqwouctx.html