概述
一、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的编码顺序不一样。请看下图:
最后
以上就是能干飞机为你收集整理的RGB、YUV420、NV21、I420编码区别的全部内容,希望文章能够帮你解决RGB、YUV420、NV21、I420编码区别所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复