• YUV数据的几种采样格式以及保存方式


    YUV数据的几种采样格式以及保存方式

    1.YUV数据的几种采样格式

    4:4:4 这个不用解释了,这是每个像素占三个字节的内存.

    4:2:2  Y0U0V0  Y1U1V1  Y2U2V2  Y3U3V3对于这四个像素,采样之后存放的码流为:Y0U0 Y1V1 Y2U2 Y3V3,占用的内存大小为4+4/2 +4/2=8

    4:2:0并不意味着只有Y和U而没有V,他指的是对于每行扫描线来说,只有一种色度分量以2:1的抽样率存储,相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0的话,下一行就是4:0:2, 对于[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3] [Y4 U4 V4] [Y5 U5 V5] [Y6 U6 V6] [Y7U7 V7] 。采样之后存放的码流为Y0 U0 Y1 Y2 U2 Y3 Y4 V4 Y5 Y6 V6 Y7.  占用的内存是width*height*3/2.

    2.YUV数据的几种保存格式

    通常有两大类,打包格式和平面格式,打包格式是指将YUV保存在一个数组里面,然后YUV交叉存放,平面格式是指将YUV分量分别保存在三个不同的数组中.

    YUV422

    对于YUV422来说,有三种保存方式分别是平面,半平面交叉方式.

    注意422交叉存放时的顺序是UYVY.

    YUV420

    420是应该是没有交叉模式的,只有平面模式和半平面模式.

     

    HISI获取的YUV数据格式是YUV420的,保存格式一般是NV12或者NV21,就是UV交叉存放的那种。

    对于YUV420SP的格式来说,从上图可以看到,对于第i行j列的像素来说(i的范围是0 ~ width-1,j的范围是0 ~ height-1),

    他的y数据指针就是 i*width + j ; i j 都是从0开始。   

    他的u数据指针是:width*height + (i/2) *width + (j/2)*2

    他的V数据是:width*height + (i/2) *width + (j/2)*2 + 1

    作者:cumtchw
    出处:http://www.cnblogs.com/cumtchw/
    我的博客就是我的学习笔记,学习过程中看到好的博客也会转载过来,若有侵权,与我联系,我会及时删除。

  • 相关阅读:
    解析3D打印切片软件:Cura
    步步为营,打造CQUI UI框架
    PHP为什么empty可以访问不存在的索引
    这是一篇关于魔法(Science)上网的教程
    【新阁教育】这样玩PLC,是不是有意思多了
    「新阁教育」西门子TIA实现BadApple完整实例
    C#数据结构-赫夫曼树
    C#数据结构-线索化二叉树
    SQL优化器-RBO与CBO分别是什么
    Linux下安装并配置VSCode(Visual Studio Code)
  • 原文地址:https://www.cnblogs.com/cumtchw/p/10224329.html
Copyright © 2020-2023  润新知