使用zxing二维码识别
2019-02-25 16:10:52来源:博客园 阅读 ()
1.多二维码识别 (同一张图片中多二维码识别)
直接上代码舒服:
pom文件:
1 <!-- QR Code --> 2 <dependency> 3 <groupId>com.google.zxing</groupId> 4 <artifactId>core</artifactId> 5 <version>3.3.3</version> 6 </dependency>、
1 /** 2 * Parse multiple qr codes(解析多个二维码) 3 * 使用java实现 4 * 5 * @param bufferedImage image 6 * @return QRCode analysis results 7 */ 8 @Override 9 public Result[] analysisQRCodeOfMore(BufferedImage bufferedImage) { 10 QRCodeMultiReader qrCodeMultiReader = new QRCodeMultiReader(); 11 Result[] results = null; 12 try { 13 BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(bufferedImage))); 14 Map hints = new Hashtable(); 15 hints.put(EncodeHintType.CHARACTER_SET, SystemConstants.SYS_ENC); 16 hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE); //优化精度 17 hints.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE); //复杂模式,开启PURE_BARCODE模式; 带图片LOGO的解码方案 18 hints.put(DecodeHintType.POSSIBLE_FORMATS,BarcodeFormat.QR_CODE);//指定识别的二维码格式 19 results = qrCodeMultiReader.decodeMultiple(binaryBitmap, hints); 20 } catch (NotFoundException e) { 21 //e.printStackTrace(); 22 System.err.println("二维码识别中..."); 23 } 24 return results; 25 }
注意:开启精度优化与复杂模式会消耗识别时间!
在多二维码识别中,应该说是zxing的一个小bug,在识别过程中对于模糊一点的图片,会一直抛异常 (二维码识别中...) 直至二维码识别不出来,或者二维码识别出来;此问题没来得及细细研究,等日后补充;
2.单二维码识别:
1 private String decodeQRCode(Mat src) { 2 if (src == null) { 3 return null; 4 } 5 BufferedImage image; 6 try { 7 image = ImageUtils.mat2BufferedImage(src, ".jpg"); 8 LuminanceSource source = new BufferedImageLuminanceSource(image); 9 Binarizer binarizer = new HybridBinarizer(source); 10 BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer); 11 Map<DecodeHintType, Object> hints = new HashMap<>(); 12 hints.put(DecodeHintType.CHARACTER_SET, SystemConstants.SYS_ENC); 13 hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE); 14 Result resultText = new MultiFormatReader().decode(binaryBitmap, hints); 15 return resultText.getText(); 16 } catch (NotFoundException e) { 17 LogUtils.info("[QRCodeServiceImpl] decodeQRCode image transform failed."); 18 } 19 return null; 20 }
以上代码使用opencv格式的图片来转换为BufferedImage为需要的入参;
3. (扩展) 多二维码识别与多二维码识别不同点:
1 public Result[] decodeMultiple(BinaryBitmap image, Map<DecodeHintType,?> hints)
单二维码识别函数:
1 public Result decode(BinaryBitmap image, Map<DecodeHintType,?> hints)
完毕!
private String decodeQRCode(Mat src) {
if (src == null) {
return null;
}
BufferedImage image;
try {
image = ImageUtils.mat2BufferedImage(src, ".jpg");
LuminanceSource source = new BufferedImageLuminanceSource(image);
Binarizer binarizer = new HybridBinarizer(source);
BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);
Map<DecodeHintType, Object> hints = new HashMap<>();
hints.put(DecodeHintType.CHARACTER_SET, SystemConstants.SYS_ENC);
hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
Result resultText = new MultiFormatReader().decode(binaryBitmap, hints);
return resultText.getText();
} catch (NotFoundException e) {
LogUtils.info("[QRCodeServiceImpl] decodeQRCode image transform failed.");
}
return null;
}
原文链接:https://www.cnblogs.com/routine/p/10421439.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 聊聊 OAuth 2.0 的 token expire_in 使用 2020-06-08
- 为什么阿里巴巴Java开发手册中强制要求接口返回值不允许使用 2020-06-06
- 学习笔记之方法引用 2020-06-06
- idea使用小技巧(一) 2020-06-05
- 用斗地主的实例学会使用java Collections工具类 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash