前一篇提到了,相机返回的是YUV格式的图像数据,那么YUV到底是怎样一种格式呢?本篇将对YUV图像格式进行详细的解释。
上一篇中,我们了解了Android二维码扫描开发的实现思路和原理。其中从相机里获取到的数据是NV21格式的,NV21属于YUV图像,当然有些外置摄像头会返回其他YUV格式的数据,那么我们就来看一看,到底什么是YUV图像。
RGB图像大家都了解,RGB图像分为了三个颜色分量,R红色分量,G绿色分量,B蓝色分量。而YUV图像,也是分为了三个分量,Y亮度分量,用来表示明亮度,也叫灰阶值,U分量和V分量是色值分量,用来表示图像色彩与饱和度,其中U分量也叫Cb,表示的图像蓝色偏移量,V分量也叫Cr,用来表示图像红色部分偏移量,所以YUV有时也写作YCbCr。
YUV图像把亮度和色度分开了,避免了亮度和色度的相互干扰,可以在降低色度采样率的情况下,保持图像的视觉质量。
[采样比率]
下面我们来看看YUV图像的采样方式,是如何改变色度采样率的。YUV图像有以下几种采样比例:
如果用×表示Y数据,用〇表示UV数据,那么下面几种采样如下图所示:
[存储方式]
YUV数据的存储方式分为打包的(packed)和平面的(planar)。
packed存储方式是,每一组YUV作为一个连续存储,每个组后面跟着另外一组,常见的有UYVY、YUYV等类型,以YUYV(属于YUV422)为例,储存方式如下图所示:
从上图中可以看出,两个相邻的Y共用一组UV,Y和UV是交错储存的。
planar储存方式是,先是连续的Y,然后是连续的UV,UV可以交错也可以不交错。以YUV420为例,YUV420分为YUV420P和YUV420SP,区别是YUV420P中U和V是分开连续存储的,YUV420SP中,UV是交错存储的。如下图所示:
[常见YUV格式]
[YUV图像处理]
①YUV422和YUV420之间的转换
YUV422转YUV420,需要在垂直方向上隔行采样,只保留奇数行或偶数行的UV数据。YUV420转YUV422,需要在垂直方向上,将一行拷贝成两行。
②YUV转RGB
YUV和RGB的计算方法,用矩阵公式表示的话,如下图所示:
如果用算数公式表示的话如下所示:
RGB转YUV:
Y = 0.299 R + 0.587 G + 0.114 B
U = - 0.1687 R - 0.3313 G + 0.5 B + 128
V = 0.5 R - 0.4187 G - 0.0813 B + 128
YUV转RGB:
R = Y + 1.402 (V - 128)
G = Y - 0.34414 (U - 128) - 0.71414 (V - 128)
B = Y + 1.772 (U - 128)
注意,这里只是单个像素点的转换方法,图像里的批量转换,还需根据YUV的储存格式进行考虑。
YUV图像就先讲解到这里,下一篇我将对YUV图像和RGB图像的亮度计算,以及zxing的使用方法进行介绍。
源码地址:https://github.com/xushanmeng/QRCodeScannerDemo
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有