YUV420存储为BMP和JPG图片

本文详细介绍了YUV420SP格式,包括其数据结构、从YUV内存取数据的方法、YUV到RGB的转换公式和方法,以及如何将RGB数据存储为BMP和JPG图片。同时,讨论了YUV420SP与YUV420P之间的转换,并提供了实现效果。
摘要由CSDN通过智能技术生成

       网上大多数关于YUV420的资料都是关于YUV420P的,很少有YUV420SP的,因为YUV420SP的UV是交错存放的,处理起来相对麻烦点,但是YUV420SP也是一种常见格式,因此,在这里,我将关于YUV420SP格式数据的处理总结下,方便有需要的同志。


一、YUV420格式数据介绍

       YUV,分为三个分量,“Y”表示明亮度,也就是灰度值;“U"和”V"表示的则是色度,作用是描述影像色彩饱和度,用于指定像素的颜色。YUV主流的采样方式有三种:YUV4:4:4,YUV4:2:2,YUV4:2:0,这里主要介绍下YUV420。

        在YUV420中,一个像素点对应一个Y,一个2X2的小方块对应一个U和V。对于所有YUV420图像,它们的Y值排列是完全相同的,因为只有Y的图像就是灰度图像。YUV420又分为YUV420SP与YUV420P这两种,这两种格式的Y分布是相同的,区别在于UV:YUV420p它是先把U存放完后,再存放V,也就是说UV它们是连续的;而YUV420sp它是UV、UV这样交替存放的。(他们的内存分布图如下,左是YUV420sp,右是YUV420p)
               

二、从YUV内存中取数据组方法

       注意YUV是每四个Y对应一个UV,并且YUV420P和YUV420SP的UV的存放格式不同,取法也不同,总的来说,YUV420P的取法简单,YUV420SP的取法相对复杂点。

1、YUV420SP

for(int j=0;j<DataHeight;j++)   
{  
    for(int i=0;i<DataWidth;i++)  
    {  
        y=ybase[i + j * DataWidth];// 每四个y对应一个uv  
        u=ubase[j/2 * DataWidth+(i/2)*2];  
        v=ubase[j/2 * DataWidth+(i/2)*2+1];  //一定要注意是u+1      
    }  
} 


2、YUV420P

for(int j=0;j<DataHeight;j++)   
{  
    for(int i=0;i<DataWidth;i++)  
    {  
        //yyyyyy ... uuuu ...vvv
        y=ybase[i + j * DataWidth];
        u=ubase[j/2 * Data
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值