我是靠谱客的博主 能干飞机,最近开发中收集的这篇文章主要介绍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的编码顺序不一样。请看下图:

 

最后

以上就是能干飞机为你收集整理的RGB、YUV420、NV21、I420编码区别的全部内容,希望文章能够帮你解决RGB、YUV420、NV21、I420编码区别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部