yuv444、yuv422、yuv420之间的关系和转换

区块链

581人已加入

描述

先来说说YUV信号: 准确来说,YUV是一种颜色编码方法,而yuv信号是由RGB经过矩阵变换电路(至于是如何转换的,先不用去理它)得到的亮度信号Y和两个色差信号U(blue-Y)、V(red-Y)。 再来理解一下屏幕分辨率: 我们经常说屏幕的分辨率:1204x768 等,指的是整个屏幕的有768行像素,每行像素有1024个像素,那么,现在问题是构成整张屏幕的图片大小了,拿RGB图像格式(准确来说是RGB888:表示R、G、B各占8个比特位)来算一下:每个像素由R、G、B构成,R、G、B各占一个字节,所以一个像素需要3个字节空间,整个屏幕算下来需要:1024x768x3 这么多个字节空间来存储。 好,有点扯远了! 如果可以理解RGB的话那么就可以理解yuv了:每个像素由 Y、U、V构成, Y、U、V 各占一个字节,其原理类似RGB。 现在来说一下 yuv444: ‘4’可以理解为:每四个像素里 y、u、v 的个数比例为 4:4:4,看一下下面四个像素点: [y0u0v0] [y1u1v1] [y2u2v2] [y3u3v3] // 注意下标由0开始计数 这里每个像素的yuv都是完好的; 再来看一下 yuv422:(相信大家应该知道其含义了吧:每四个像素里 y、u、v 的个数比例为 4:2:2)就是说四个像素里是这样构成的: [y0u0--] [y1--v1] [y2u2--] [y3--v3] 第一个像素点去掉u,第二个像素点去掉v,下一个像素点去掉u,在下一个像素点去掉v;这里,就有人会问了,这样不就会存在色差吗?当然,肯开会存在色差的,但并不明显,一般人眼无法分辨出来。 接下来需要理解的概念是:映射像素点 什么是映射?为什么要映射?我们知道要构成一个像素点,对于yuv格式来说,必须要y、u、v来组成,那么对于缺掉u、v的 yuv422 来说,想要构成完整的 yuv 就要相邻两个像素之间互相共用,比如: [y0u0--] [y1--v1] 两个像素映射出来就是:[y0u0v1] [y1u0v1] [y2u2--] [y3--v3] 两个像素映射出来就是:[y2u2v3] [y3u2v3] 第一个像素点共用下一个像素掉的v,第二个像素点的共用前一个像素掉的u; 好终于到了yuv420了: 那什么又是yuv420呢?yuv420可不是每四个像素之间y、u、v的个数比例为:4:2:0,它比较复杂一点,因为它是在yuv422基础上然后按照一行一行来取舍的:一行去掉u,一行去掉v;也就是说:假如,第一行全部u去掉,那么第二行的v就全部去掉,而再下一行的u全部去掉,像素存放像下面这样: yuv444: 第一行:[y00u00v00] [y01u01v01] [y02u02v02] [y03u03v03] [y04u04v04] [y05u05v05] 第二行:[y06u06v06] [y07u07v07] [y08u08v08] [y09u09v09] [y10u10v10] [y11u11v11] yuv422: 第一行:[y00u00---] [y01---v01] [y02u02---] [y03---v03] [y04u04---] [y05---v05] 第二行:[y06u06---] [y07---v07] [y08u08---] [y09---v09] [y10u10---] [y11---v11] yuv420: 第一行:[y00u00---] [y01------] [y02u02---] [y03------] [y04u04---] [y05------] 第二行:[y06------] [y07---v07] [y08------] [y09---v09] [y10------] [y11---v11] 以此类推下去。 那么yuv420又如何反推其映射像素点 既然yuv420是以行来处理的,那么映射时就是相邻两行每两个像素之间来互相公用u、v,比如这样: yuv420: 第一行:[y00u00---] [y01------] [y02u02---] [y03------] [y04u04---] [y05------] 第二行:[y06------] [y07---v07] [y08------] [y09---v09] [y10------] [y11---v11] 映射为: 第一行:[y00u00v07] [y01u00v07] [y02u02v08] [y03u02v09] [y04u04v11] [y05u04v11] 第二行:[y06u00v07] [y07u00v07] [y08u02v09] [y09u02v09] [y10u04v11] [y11u04v11] 映射原理是这样的:一行的两个像素点和相邻下一行的相同位置的两个像素点之间u、v共用,是不是有点晕,打个比方说:第一行的第一二个像素点,和第二行的第一二个像素点(必须是第一二)之间只会存在一个 u, 一个 v,所以像素点间缺什么就补什么。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相关推荐

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分