报表中含有单号二维码,纸质单据经扫描仪扫描为图片后,使用com.google.zxing解析二维码生成单号供程序使用。在实际使用过程中发现二维码解析时而有失败的情况,对扫描的单据图片进行分析后发现,解析失败得到都是扫描质量稍差者。

为了提高解析的成功率,首先想到的是报表单据打印的质量以及扫描为图片的质量都要好才能保证图片的质量,但实操的过程中受限于使用者的打印机和扫描仪,以及操作人员的水平,只好建议他们尽量使用较好的设备。其次,就是优化代码,看看是否能在代码的层面提高二维码识别率。

从代码的层面提高识别率,想到2个方案,其一对图片进行去除噪点的操作,生成高质量的图片;另外就是考虑到把整个图给Zxing进行识别,此时图片质量稍差就无法识,那么只是截取图片的中的二维码部分给ZXing识别是不是能提高识别率呢?

经实战发现对图片进行降噪,代价太大,在笔者的计算机上一张图降噪处理需要5秒钟左右,对于批量识别的情况不大适合。

所以,只要采取截取图片的中的二维码部分给ZXing识别这个方案试下了。

代码如下,其中 image = image.getSubimage(x,y,width,height);为核心代码。

 public static String decode(BufferedImage image,int x,int y,double width,double height) {try {image = image.getSubimage(x,y,width,height);LuminanceSource luminanceSource = new BufferedImageLuminanceSource(image);Binarizer binarizer = new HybridBinarizer(luminanceSource);BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);Map<DecodeHintType, Object> hints = new HashMap<>();// 解码设置编码方式为:utf-8,hints.put(DecodeHintType.CHARACTER_SET, "utf-8");//优化精度hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);Result result = new QRCodeReader().decode(binaryBitmap, hints);return result.getText();} catch (NotFoundException | ChecksumException | FormatException e) {log.error("图片中不存在二维码或者解析而二维码失败", e);throw new ServiceException("图片中不存在二维码或者解析而二维码失败", e);}}

经过测试,上面的代码大大提高了二维码的解析成功率。

备注,另外根据测试发现识别的精度还和二维码的大小有关系,如果二维码过大可以通过等比率缩放的方式将二维码缩小,代码如下:

  public static BufferedImage getScale(BufferedImage image,double scale) {AffineTransformOp transformOp = new AffineTransformOp(AffineTransform.getScaleInstance(scale, scale), null);image = transformOp.filter(image, null);return image;}

ZXing二维码解析精度提高一瞥相关推荐

  1. 二维码之zxing二维码解析图片资源

    前面讲了如何利用zxing生成二维码图像以及仿照新浪微博方式生成二维码.接下来,就要开始谈到如何利用zxing解析二维码图像. zxing针对不同开发平台,都给出了解析二维码的例子,我这里只聊聊关于a ...

  2. 加载google Z-Xing库实现二维码解析与生成,并将解析结果在另一页面显示

    1.首先需要下载Z-Xing 库项目下载文档,可在http://download.csdn.net/detail/catchingsun/8903065进行下载: 2.解析二维码,并跳转至新建Acti ...

  3. java条形码和二维码解析

    java条形码和二维码解析 条形码(一维码) 条形码(barcode) – 将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符 – 通常代表一串数字/字母,每一位有特殊含 ...

  4. Zxing二维码的集成使用

    在github网站搜索Zxing 详见:https://github.com/yipianfengye/android-zxingLibrary 在module的build.gradle中执行comp ...

  5. Android 基于Zxing二维码扫描的光速实现

    Android 十分钟光速实现二维码扫描 前言 在项目中要使用到二维码的相关内容,我们第一时间想到的是使用大名鼎鼎的zxing或者ZBar开源框架: github-zxing官方库的地址 github ...

  6. com.google.zxing 二维码工具类

    com.google.zxing 二维码工具类 pom 工具类 使用 pom <dependency><groupId>com.google.zxing</groupId ...

  7. Marco's Java【小工具篇 之 Google Zxing 二维码生成】

    前言 二维码相信大家一定不陌生啦,去菜市场买菜,路边摊买个小吃都可以扫一扫,近几年来中国的二维码技术的普及也是大家有目共睹的,而二维码在其他国家虽然有用到,但极少,更没有说全国普及. 二维码又称二维条 ...

  8. python 二维码解析

    1.环境 mac brew install zbar pip install pyzbar pip install opencv-pythoncentos8 yum install zbar-deve ...

  9. ZXing二维码介绍

    ZXing(Zebra Crossing)是Google开发的一个二维码解析和生成的开源库. ZXing GitHub地址 引入 <dependency><groupId>co ...

最新文章

  1. 使用HDFS API实现hadoop HDFS文件系统的基本操作
  2. [转载]eclipse的远程调试功能配置
  3. 【原拼】从/etc/inetd.conf学习服务(1)
  4. hadoop 启动or运行mr错误
  5. ASP.NET页面的处理过程完全版_AX
  6. js函数的内部属性---arguments,callee,caller
  7. github ssh 配置_Github远程仓库克隆更新本机,SSH协议免密操作配置和注意事项
  8. 用WEB技术栈开发NATIVE应用:WEEX SDK原理详解
  9. 众安每秒3.2万张保单的背后,阿里云输出了什么能力?
  10. C语言指针变量--图示易懂
  11. java架构之路(多线程)synchronized详解以及锁的膨胀升级过程
  12. Seaborn学习笔记4
  13. 2018最新电大网考计算机,2018年最新电大网考计算机应用基础统考试题.doc
  14. C/C++全局钩子实现,手把手
  15. 一生不要瞎忙,只要做对三件事
  16. HIT 软件构造2019春 Lab3
  17. 163邮箱如何注册呢?
  18. dnf 台服服务器pvf修改器,求教怎么用pvf修改器自制装备
  19. python北京房价预测_《安家》热播,我用Python对北京房价进行了分析,结果……...
  20. 【python与数据分析】CH3 python序列结构补充——字符串

热门文章

  1. c语言中%d是什么意思
  2. python Django 教程
  3. UbuntuServer搭建打印服务器
  4. java显示65289_2018成人高考高起点语文病句识别#65288;1#65289;
  5. 苹果签名是什么意思_tf签名是什么意思
  6. 这就是冒泡排序,像可乐中的气泡滋滋向上冒一样(44)
  7. WORD表格后插入空白段落
  8. 《Xilinx - UG471中文翻译》(3)OSERDESE2原语介绍
  9. 哪个软件测试手机电池续航好,6部手机电池续航测试:华为排名第3,比最后一名多1小时...
  10. pycharm指定python路径