zxing 如何识别反转二维码

简介: 说起二维码扫描,估计很多人用的是 zxing 吧。然而 zxing 虽然好用,但是却有一些坑。这边分析一下自己实际项目遇到的一个坑。什么坑呢?下面举个栗子你就懂了。

说起二维码扫描,估计很多人用的是 zxing 吧。

然而 zxing 虽然好用,但是却有一些坑。

这边分析一下自己实际项目遇到的一个坑。

什么坑呢?

下面举个栗子你就懂了。

这边生成二维码使用的是网络上的一个网站联图

以百度为例,正常情况生成的二维码如下:

百度正常二维码

这种情况下用 zxing 分分钟就可以识别出来。

但是假设我将前景色和后景色调换,生成的二维码如下:

百度反转二维码

这种情况下 zxing 就识别不出了。

所以说这种时候就很无奈了。毕竟有些场景就需要用到反转二维码。

所以本篇说的 zxing 的坑就是无法识别反转二维码

咋办呢?凉拌。

这种时候就需要去源码看看了。

看一下二维码解析的代码逻辑在哪?

通过一番折腾,跟踪调试,最后定位到如下位置:

https://github.com/zxing/zxing/blob/master/android/src/com/google/zxing/client/android/DecodeHandler.java#L80

关键代码:(DecodeHandler.java 里面的 decode 方法)

BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));

如果要识别上面的反转百度二维码,需要如何处理呢?

很简单,只需要将上面的代码改为:

BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source.invert()));

即可。

到了这里,相信聪明的你应该知道如何让 zxing 同时支持两种格式了。

只需要设置一个计数器,然后在指定次数(比如前 3 次)里面使用

BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));

在另外次数(比如后 3 次)里面使用

BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source.invert()));

交替使用即可。

这样就可以解决正转和反转二维码的识别了。

NOTE:

  1. 通过交替识别可能会降低识别速度,因此次数设置为多少需要自己调试把控。
  2. 计数时注意避免次数溢出。

如果你有其他方法,欢迎留言讨论。

相关文章
|
4月前
|
计算机视觉
OpenCV(三十八):二维码检测
OpenCV(三十八):二维码检测
135 0
|
Android开发
autojs提高二维码识别率(一)-标记定位点
autojs提高二维码识别率(一)-标记定位点
326 0
|
Java Maven 数据安全/隐私保护
Java 图片添加文字或者logo水印(附代码) | Java工具类
Java 图片添加文字或者logo水印(附代码) | Java工具类
Java 图片添加文字或者logo水印(附代码) | Java工具类
|
开发工具 计算机视觉
配置zbar识别二维码(转载)
原文地址:http://blog.csdn.net/dcrmg/article/details/52108258  二维码解码器Zbar+VS2012开发环境配置 Zbar条码解码器是一个开源的二维码(包括条形码)解码器,可以识别来至于视频流,图像文件、手持扫码器和视频设备(如摄像头)等二维码识别,支持EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, QR Code(二维码)等常用编码方式的条形码/二维码。
2496 0
28用zxing对二维码的解析
28用zxing对二维码的解析
109 0
|
图形学
Unity3D 生成&识别二维码
Unity扫描识别二维码 用WebCamTexture 获得摄像头数据,并把他付给UI层的RawImage.这个用来展示摄像头拍摄的内容画面。 private void CreateWebcamTex(string deviceName){ mWebCamTexture = new WebCamTexture(deviceName,1280, 720); rawImage.
1682 0