Atitit java 二维码识别 图片识别

1.1. 解码1
1.2. 首先,我们先说一下二维码一共有40个尺寸。官方叫版本Version。1
1.3. 二维码的样例:2
1.4. 定位图案2
1.5. 数据编码3
1.6. 错误修正容量L水平7%的字码可被修正M水平15%的字码可被修正Q水平25%的字码可被修正H水平30%的字码可被修正3
1.7. QR是怎么对数据码加上纠错码的?3
1.8. 画二维码图4
1.9. 简要的编码过程:数据分析:确定编码的字符类型,按相应的字符集转换成符号字符; 选择纠错等级,7
1.10. qr长度容量7

1.1.解码
编码lib:Qrcode_swetake.jar   (官网介绍-- http://www.swetake.com/qr/index-e.html)             
解码lib:qrcode.jar                 (官网介绍-- http://sourceforge.jp/projects/qrcode/)

1.2.首先,我们先说一下二维码一共有40个尺寸。官方叫版本Version。
Version 1是21 x 21的矩阵,Version 2是 25 x 25的矩阵,Version 3是29的尺寸,每增加一个version,就会增加4的尺寸,公式是:(V-1)*4 + 21(V是版本号) 最高Version 40,(40-1)*4+21 = 177,所以最高是177 x 177 的正方形。

/**
     * @param args the command line arguments
     */ 
    public static void main(String[] args) { 
        QRCodeDecoderHandler handler = new QRCodeDecoderHandler(); 
        String imgPath = "c:\\3bf33a87e950352a5936aa0a5543fbf2b2118b59.jpg"; 
        String decoderContent = handler.decoderQRCode(imgPath,"gbk"); 
        System.out.println("解析结果如下:"); 
        System.out.println(decoderContent); 
        System.out.println("========decoder success  !!!"); 
    } 
1.3. 二维码的样例:

1.4.定位图案
Position Detection Pattern是定位图案,用于标记二维码的矩形大小。这三个定位图案有白边叫Separators for Postion Detection Patterns。之所以三个而不是四个意思就是三个就可以标识一个矩形了。
Timing Patterns也是用于定位的。原因是二维码有40种尺寸,尺寸过大了后需要有根标准线,不然扫描的时候可能会扫歪了。
Alignment Patterns 只有Version 2以上(包括Version2)的二维码需要这个东东,同样是为了定位用的。

功能性数据
Format Information 存在于所有的尺寸中,用于存放一些格式化数据的。
Version Information 在 >= Version 7以上,需要预留两块3 x 6的区域存放一些版本信息。
数据码和纠错码
除了上述的那些地方,剩下的地方存放 Data Code 数据码 和 Error Correction Code 纠错码。
1.5.数据编码
我们先来说说数据编码。QR码支持如下的编码:数字,字符,byte

1.6.错误修正容量L水平7%的字码可被修正M水平15%的字码可被修正Q水平25%的字码可被修正H水平30%的字码可被修正

1.7.QR是怎么对数据码加上纠错码的?
首先,我们需要对数据码进行分组,也就是分成不同的Block,然后对各个Block进行纠错编码,对于如何分组,我们可以查看QR Code Spec的第33页到44页的Table-13到Table-22的定义表。注意最后两列:

1.8.画二维码图
Position Detection Pattern
首先,先把Position Detection图案画在三个角上。

1.8.1.1.1.Alignment Pattern
然后,再把Alignment图案画上

关于Ali
1.8.1.1.2.Timing Pattern
接下来是Timing Pattern的线(这个不用多说了)

1.8.1.1.3.Format Information
再接下来是Formation Information,下图中的蓝色部分。

Format Information是一个15个bits的信息,每一个bit的位置如下图所示:(注意图中的Dark Module,那是永远出现的)

这15个bits中包括:
5个数据bits:其中,2个bits用于表示使用什么样的Error Correction Level, 3个bits表示使用什么样的Mask
10个纠错bits。主要通过BCH Code来计算
然后15个bits还要与101010000010010做XOR操作。这样就保证不会因为我们选用了00的纠错级别,以及000的Mask,从重造
1.8.1.1.4.Version Information
再接下来是Version Information(版本7以后需要这个编码),下图中的蓝色部分。

Version Information一共是18个bits,其中包括6个bits的版本号以及12个bits的纠错码,下面是一个示例:
数据和数据纠错码
然后是填接我们的最终编码,最终编码的填充方式如下:从左下角开始沿着红线填我们的各个bits,1是黑色,0是白色。如果遇到了上面的非数据区,则绕开或跳过。

掩码图案
这样下来,我们的图就填好了,但是,也许那些点并不均衡,所以,我们还要做Masking操作(靠,还嫌不复杂)QR的Spec中说了,QR有8个 Mask你可以使用,如下所示:其中,各个mask的公式在各个图下面。所谓mask,说白了,就是和上面生成的图做XOR操作。Mask只会和数据区进 行XOR,不会影响功能区。

1.9.简要的编码过程:数据分析:确定编码的字符类型,按相应的字符集转换成符号字符; 选择纠错等级,
在规格一定的条件下,纠错等级越高其真实数据的容量越小。数据编码:将数据字符转换为位流,每8位一个码字,整体构成一个数据的码字序列。其实知道这个数据码字序列就知道了二维码的数据内容。
数据可以按照一种模式进行编码,以便进行更高效的解码,例如:对数据:01234567编码(版本1-H),1)分组:012 345 672)转成二进制:012→0000001100               345→0101011001                 67 →10000113)转成序列:0000001100 0101011001 10000114)字符数 转成二进制:8→00000010005)加入模式指示符(上图数字)0001:0001 0000001000 0000001100 0101011001 1000011对于字母、中文、日文等只是分组的方式、模式等内容有所区别。基本方法是一致的
1.10.qr长度容量
Cn utf8 984 
Byte 2953byte 
Ch 4296   num 7089

1.11.二维码的解析

1、定位图形:首先寻找探测图形,就是二维码上的三个方块。这三个方块的作用就是不管在哪个方向扫描图形,都可以扫到,不信可以将手机翻转测试一下。在通过二维码上的定位图形和分隔符确定二维码信息的图像。定位图形确定二维码符号中模块的坐标,二维码中的模块都是固定的,包括校正图形,版本信息,数据和纠错码。分隔符呢,就是将探测图形与二维码信息图像分开。

2、灰度化二维码信息像素:手机拍到的图像都是彩色的,所以拍摄到二维码也不列外,它也是彩色的,只不过除了黑白,其他颜色非常浅而已。灰度化是指通过颜色的深浅来识别二维码,就是说颜色深的按深灰处理,浅色的按浅灰处理,去掉其他颜色。

3、去掉二维码信息像素的噪点:相机的传感器在把光线作为接收信号和输出过程产生的粗糙像素,这些粗糙的像素是照片中不应该出现的干扰因素。噪点就是指这些粗糙的像素。

4、二值化二维码信息像素:二值化是说将图像上像素灰度值设置为0或者255,也就是变成只有黑白两种颜色。第一步已经灰度化变成只有深灰和浅灰两种颜色,现在二值化是将深灰变成黑色,浅灰变成白色。为什么变成黑白色呢。因为二维码图像其实是由二进制的0或者1组成,0代表白色,1代表黑色。二维码在二值化时会将二维码图像变成只有黑白色的条码,然后根据解析公式什么的(因为像素是0-255之间,要全部转变成0或者255,估计得经过一些计算,然后0就是0,255变为1)转化成二进制信息。

5、二维码译码和纠错:将得到的二进制信息进行译码和纠错。得到的二进制信息是版本格式信息、数据和纠错码经过一定的编码方式生成的,所以译码是对版本格式信息,数据和纠错码进行解码和对比。纠错是和译码同时进行的,将数据进行纠错。

Atitit.二维码功能的设计实践 attilax 总结 - attilaxAti - 博客园.html
atitit.二维码生成总结java zxing - attilax的专栏 - 博客频道 - CSDN.NET.html
 
Java实现二维码QRCode的编码和解码 - 记忆是夏天 - 博客频道 - CSDN.NET.html
二维码的生成细节和原理 - 51CTO.COM.html
二维码原理介绍_百度经验.html
二维码的生成和解析原理 - kelindame的专栏 - 博客频道 - CSDN.NET.html
二维码的工作原理_百度知道.html

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 
汉字名:艾提拉(艾龙),   EMAIL:1466519819@qq.com
转载请注明来源: http://www.cnblogs.com/attilax/
Atiend

转载于:https://www.cnblogs.com/attilax/p/6009894.html

Atitit java 二维码识别 图片识别相关推荐

  1. Java—二维码生成与识别(一)

    一.二维码生成 思路:将字符串中的每个字符转为二进制码字符串,保存在二进制码字符串数组中.对二进制码字符串数组中的每个二进制码字符串进行字符遍历,若是'0',则设置画笔颜色为白色,若是'1',则设置画 ...

  2. Java实现二维码生成与识别

    java实现QRCODE二维码的编码与解码实例 众所周知,爪哇,是一种神奇的编程语言,用JAVA 实现某一个功能,只是随便上网找一些对应的实现JAR包即可,于是,有了像JAR114这样专门提供给 爪哇 ...

  3. Android 二维码 生成和识别

    今天讲一下目前移动领域很常用的技术--二维码.现在大街小巷.各大网站都有二维码的踪迹,不管是IOS.Android.WP都有相关支持的软件.之前我就想了解二维码是如何工作,最近因为工作需要使用相关技术 ...

  4. Android之二维码生成与识别 读取相册

    二维码生成与扫描 转自http://blog.csdn.net/u012702547/article/details/51501350 读取相册二维码 转自http://blog.csdn.net/a ...

  5. 玩转Android之二维码生成与识别

    二维码,我们也称作QRCode,QR表示quick response即快速响应,在很多App中我们都能见到二维码的身影,最常见的莫过于微信了.那么今天我们就来看看怎么样在我们自己的App中集成二维码的 ...

  6. 1分钟快速实现高效的扫描二维码,急速识别手机相册二维码

    最近由于项目需求,需要在二维码扫描时添加识别相册内二维码的功能,于是,遇到了许多问题在这里总结,好为以后不在采坑. 1.二维码识别速度慢,效率低 2.手机相册内的二维码识别速度慢,识别不出来 好了,主 ...

  7. python识别发票二维码_Python 实现二维码生成和识别

    今天突然想给自己自己做个头像,然后还是二维码的形式,这样只要扫一扫就可以访问我的主页.然后就开始自己的苦逼之路... 其实实现二维码java,c#,C++等都可以实现:由于自己正在学python,所以 ...

  8. Android 二维码/条形码的识别或生成

    序言 二维码/条形码是生活中非常常见的技术,只要通过手机或者扫码枪扫描一下就能读取到里面的信息,给我们的生活带来了很多的便利.在Android开发当中,这也是很常用的技术.本文主要简单的介绍所用到的工 ...

  9. python 二维码生成与识别

    python 二维码生成与识别 1.生成二维码 1.1 qrcode 安装qrcode模块 pip install qrcode 示例: # author:mlnt# createdate:2022/ ...

最新文章

  1. 数据库编程入门培训(二)
  2. Ubuntu虚拟机JeOS安装-2016.08.28
  3. php5.5 mysql密码无法_MySQL密码正确却无法本地登录的解决方法
  4. [工具整理] Debain(KDE)下常用工具
  5. Android开发之Base64与bitmap互转的工具类
  6. Git,Git Flow,GitLab使用指南
  7. 【渝粤教育】国家开放大学2018年春季 0341-21T高级英语听力(2) 参考试题
  8. JavaScript中的数学对象Math
  9. linux内核计数函数,linux中的内核引用计数器
  10. Java常用类StringBuffer详解
  11. JavaScript循环结构(1)
  12. docker“少折腾”
  13. [GZOI2017]取石子游戏
  14. ZMQ中线程之间发送命令
  15. jflash添加芯片_【原创】巧用J-Link+J-Flash给Kinesis烧写序列号
  16. 20135202闫佳歆——家庭作业汇总
  17. 人脸识别考勤机选型验收标准
  18. Office2010新体验-基于Office Visio 2010 图表绘制新体验
  19. 网络传输的加密与解密
  20. Leetcode 460. LFU 缓存

热门文章

  1. 用Kettle的一套流程完成对整个数据库迁移 费元星
  2. 源代码解读Cas实现单点登出(single sign out)功能实现原理
  3. 技术人生:如何成为一位优秀的程序员
  4. Xampp安装PHPUnit
  5. OSPF:MTU不一致导致的邻接关系问题
  6. [JavaScript]牛人的JS是怎么玩的
  7. SDR、DDR、QDR存储器的比较
  8. 如何让Keil MDK兼容Keil C51?
  9. 数组公式基本功修炼之深入使用
  10. opencv-python图像处理之轮廓算法