RGB、YUV420、NV21、I420编码区别

一、RGB与YUV
首先了解视频编码为什么使用YUV420而不是rgb。那么需要了解两者的原理,看图说话

 

所以从内存的角度来说,yuv单位像素使用的内存更低,但是两者表示的效果是一致的,也可以认为rgb过度绘制了,把人眼无法分辨的区域也进行了绘制。

下面看一下两者之间内存暂用对比,这里采用·rgb24对比

RGB24使用24位来表示一个像素,RGB分量都用8位表示,取值范围为0-255。在一个2*2的像素区域,RRG暂用的字节数为2*2*3=12字节。那么用yuv表示,占用的字节数为4(Y)+1(u)+1(v)=6字节,其中Y占用4个字节,U和V各占用1字节,比例为4:1:1

所以在一个宽高为w*h的设备上,使用rgb表示编码占用的字节数为w*h*3,使用yuv表示暂用的内存为w*h*+w*h/4+w*h/4 = w*h*3/2.

二、YUV与NV21
首先需要了解的是yuv有很多编码格式,其中yuv420就是一种,而nv21又是yuv420的一种。并且nv21是针对android设备的视频编码。

nv21编码格式:比如一张1920*1280的图片,经过nv21编码后,会变成前面1920*1280字节全是Y,从1920*1280字节长度开始,U和V会交替排列,它们的字节长度分别为1920*1280/4。请看下图

 

如图颜色框,4个Y会对应一个UV。

三、NV21与I420
I420也是YUV420编码格式的一种,由于android手机厂商的原因,摄像头采集到的数据永远都是经过NV21编码的数据,但是对于这种数据不能够显示在苹果或windows平台,那么需要对这个编码格式的数据需要重新编码,其中I420这种编码格式,所有的厂商都是适配的。

I420编码格式:比如一张1920*1280的图片,经过I420编码后,会变成前面1920*1280字节全是Y,从1920*1280字节长度开始,会先排列U,总字节长度为1920*1280/4,从1920*1280+1920*1280/4开始排列V,字节长度为1920*1280/4,所以总的字节长度适合NV21一样的,只是UV的编码顺序不一样。请看下图:

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值