YUV空间与存储

1. yuv422,yuv420,yuv444的区别。

YUV 4:4:4采样,每一个Y对应一组UV分量。
YUV 4:2:2采样,每两个Y共用一组UV分量。
YUV 4:2:0采样,每四个Y共用一组UV分量。

2. yuv444

假如图像视720※576的
yuv444,图片的大小是720 x 576x3个字节,是总像素大小的3倍
y的字节是720 x 576
u的字节是720 x 576
v的字节是720 x 576

在这里插入图片描述

YUV444: 每一个Y分量用一组UV分量, 单个像素占用空间为: 1byte(Y) + 1byte(U) + 1byte(V) = 3 byte
一帧占用空间大小为, frameSize = frameWidth * frameHeight * 3(byte)

3. yuv422

图片的大小是720 x 576 x 2个字节,是总像素大小的2倍,

y的字节是720 x 576
u的字节是720 x 576 /2,一半帧宽度, 高度同帧高度
v的字节是720 x 576 /2, 一半帧宽度, 高度同帧高度

在这里插入图片描述

YUV422: 每两个Y分量用一组UV分量, 单个像素占用空间为: 1byte(Y) + 1/2 byte(U) + 1/2 byte(V) = 2 byte
一帧占用空间大小为, frameSize = frameWidth * frameHeight * 2(byte)

4. yuv420

图片的大小是720 x 576 x 3/2 个字节,是总像素大小的1.5倍
y的字节是720x576 w*h
u的字节是720x576 /4 (w/2) * (h/2)
v的字节是720x576 /4 (w/2) * (h/2)

在这里插入图片描述

YUV420: 每四个Y分量用一组UV分量, 单个像素占用空间为: 1byte(Y) + 1/4 byte(U) + 1/4 byte(V) = 1.5 byte
一帧占用空间大小为, frameSize = frameWidth * frameHeight * 1.5(byte)

5. yuv420p在AVFrame中的存储

YUV420P(planar格式)在ffmpeg中存储是在struct AVFrame的data[]数组中
data[0]——-Y分量
data[1]——-U分量
data[2]——-V分量
linesize[]数组中保存的是对应通道的数据宽度
linesize[0]——-Y分量的宽度
linesize[1]——-U分量的宽度
linesize[2]——-V分量的宽度

lineSize因为要做内存对齐, 不一定等于各个分量的宽度

6. 保存YUV数据

void saveAVFrame_YUV_ToTempFile(AVFrame *pFrame)
{
    int t_frameWidth = pFrame->width;
    int t_frameHeight = pFrame->height;
    int t_yPerRowBytes = pFrame->linesize[0]; //单位
    int t_uPerRowBytes = pFrame->linesize[1];
    int t_vPerRowBytes = pFrame->linesize[2];
 
    QFile t_file("E:\\receive_Frame.yuv");
    t_file.open(QIODevice::WriteOnly);
   

    for(int i = 0;i< t_frameHeight ;i++)//逐行循环
    {
        t_file.write((char*)(pFrame->data[0]+i*t_yPerRowBytes),t_frameWidth);
    }

    for(int i = 0;i< t_frameHeight/2 ;i++)  //逐行循环, 1/2 行数高度
    {
        t_file.write((char*)(pFrame->data[1]+i*t_uPerRowBytes),t_frameWidth/2); //1/2宽度
    }

    for(int i = 0;i< t_frameHeight/2 ;i++) //逐行循环, 1/2 行数高度
    {
        t_file.write((char*)(pFrame->data[2]+i*t_vPerRowBytes),t_frameWidth/2); //1/2宽度
    }

    t_file.flush();

}

7. RGB

RGB24一帧的大小size=width×heigth×3 Byte
RGB32一帧的大小size=width×heigth×4 Byte

RGB24 一个像素有R,G,B三个分量,所以一个像素就占用3个字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值