前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android二维码扫描开发(三):zxing库的使用及图像亮度信息提取

Android二维码扫描开发(三):zxing库的使用及图像亮度信息提取

作者头像
非著名程序员
发布2018-02-02 12:14:43
1.8K0
发布2018-02-02 12:14:43
举报
文章被收录于专栏:非著名程序员非著名程序员

前一篇给大家介绍了YUV图像格式,这一篇将会对zxing库,以及YUV图像和RGB图像的亮度信息提取做一下介绍。

zxing是google提供的一个开源的条码处理的库,可支持maxicode、qrcode、pdf17等多种条码,github地址如下: https://github.com/zxing/zxing

可以看出,内容还是非常多的,我们用到的也是只其中的核心部分,都在core包里面,这里提供一个打包好的zxing.jar给大家来用,或者你可以自己下载了源码自己打包。 zxing.jar下载:

http://www.codernote.top/static/blog/file/2016/03/zxing_20160325165738.zip

下面我们来看看zxing库的用法 [二维码生成] 二维码生成主要是使用QRCodeWriter这个类,encode()方法传入需要编码的字符串,会返回一个BitMatrix,然后我们把它转化转化为Bitmap可用的byte[]类型数据,就可以生成Bitmap了。

BitMatrix的get()方法返回的是boolean类型的数据,true代表二维码深色像素,false代表二维码浅色像素。注意,深色和浅色如果颜色差别不够明显,二维码有可能将无法识别,差别越大,识别成功率越高。所以一般推荐使用黑色和白色来显示二维码。 [二维码识别] 二维码识别可使用QRCodeReader或者MultiFormatReader这两个类,区别是,后者可以识别除了二维码之外的一些条码。本例中使用的是MultiFormatReader。

首先我们需要把图像源数据转换为可识别的亮度信息,zxing提供了LuminanceSource这个抽象类,根据不同的图像类型,其中的getMatrix()方法和getRow()方法需要自己来实现。zxing也提供好了planar类型的YUV图像和RGB图像的LuminanceSource,只需要传入源数据即可。

本例中改写了这两个类,增加了灰度图像Bitmap生成的方法。不管是用zxing提供的,还是自己来改写,了解了原理,写代码就很简单了。YUV图像和RGB图像如何提取亮度信息后面会讲到,这里先把zxing讲完。 LuminanceSource需要封装为HybridBinarizer,再封装为BinaryBitmap,然后通过MultiFormatReader.decodeWithState()方法进行二维码解析,解析失败会抛出异常,解析成功返回一个Result类型的结果,使用Result.getText()方法就可以得到解析后的字符串了。

注意,二维码的解析是耗时操作,为避免ANR,我们要把它放到子线程里,本例中使用的是AsyncTask。 [亮度信息处理] 对于YUV图像,前一篇已经介绍过。相对于RGB图像来说,YUV图像提取亮度信息很简单,只保留Y数据,忽略UV数据即可。相机返回的数据,大都是YUV类型数据。

如果是识别本地图像,我们需要对RGB图像做亮度信息的计算。前一篇也有介绍如何通过RGB数据来计算亮度信息,还记得这个公式么: Y = 0.299 R + 0.587 G + 0.114 B

不过在实际写代码的过程中,浮点运算太过麻烦和耗时,我们可以改变下公式,得到一个近似值就可以了: Y = (R + 2*G + B)/4 或者 Y = (R + G + G + B) >> 2

通过上面的公式就可以得到亮度信息的近似值。 关于Android二维码的应用就介绍到这里,欢迎大家多多关注。

源码地址:https://github.com/xushanmeng/QRCodeScannerDemo

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 非著名程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档