精华内容
下载资源
问答
  • 二维码简介_二维码基本概念_二维码基本原理
    千次阅读
    2021-03-27 15:13:42

    一、二维码简介_二维码基本概念_二维码基本原理

    1.二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。

    2.英文单词 QrCode

    3.二维码,跟一维码区别支持了更多的字符,从而可以讲网站链接纳入其中。

    二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。 

    中国对二维码技术的研究开始于1993年。
    中国物品编码中心对几种常用的二维码PDF417、QRCCode、Data Matrix、Maxi Code、Code 49、Code 16K、Code One的技术规范进行了翻译和跟踪研究。
    随着中国市场经济的不断完善和信息技术的迅速发展,国内对二维码这一新技术的需求与日俱增。
    中国物品编码中心在原国家质量技术监督局和国家有关部门的大力支持下,对二维码技术的研究不断深入。
    在消化国外相关技术资料的基础上,制定了两个二维码的国家标准:二维码网格矩阵码(SJ/T 11349-2006)二维码紧密矩阵码(SJ/T 11350-2006),从而大大促进了中国具有自主知识产权技术的二维码的研发。

    二、二维码常见应用场景整理

    ●信息获取(名片、地图、WIFI密码、资料)
    ●网站跳转(跳转到微博、手机网站、网站)
    ●广告推送(用户扫码,直接浏览商家推送的视频、音频广告)
    ●手机电商(用户扫码、手机直接购物下单)
    ●防伪溯源(用户扫码、即可查看生产地;同时后台可以获取最终消费地)
    ●优惠促销(用户扫码,下载电子优惠券,抽奖)
    ●会员管理(用户手机上获取电子会员信息、VIP服务)
    ●手机支付(扫描商品二维码,通过银行或第三方支付提供的手机端通道完成支付)
    ●账号登录(扫描二维码进行各个网站或软件的登录)

    小程序二维码:微信二维码库支持下的,如何生成小程序二维码济南小程序开发开发小程序

     

    三、二维码和一维码的区别

    二维条码

    多行组成的条形码,不需要连接一个数据库,本身可存储大量数据,应用于:医院、驾驶证、物料管理、货物运输,当条形码受一定破坏时,错误纠正能使条形码能正确解码二维码。它是一个多行、连续性、可变长、包含大量数据的符号标识。每个条形码有3 - 90行,每一行有一个起始部分、数据部分、终止部分。它的字符集包括所有128个字符,最大数据含量是1850个字符。
    一维条形码

    只是在一个方向(一般是水平方向)表达信息,而在垂直方向则不表达任何信息,其一定的高度通常是为了便于阅读器的对准。
    一维条形码的应用可以提高信息录入的速度,减少差错率,但是一维条形码也存在一些不足之处:
           数据容量较小: 30个字符左右,只能包含字母和数字;
           条形码尺寸相对较大(空间利用率较低);
           条形码遭到损坏后便不能阅读;
            在水平和垂直方向的二维空间存储信息的条形码, 称为二维条形码(dimensional bar code)
     

    四、二维码的优点

    1.高密度编码,信息容量大。
    2.编码范围广。
    3.容错能力强,具有纠错功能。
    4.译码可靠性高。
    5.可引入加密措施。
    6.成本低,易制作,持久耐用。
     

     

    五、C#如何生成条形码、二维码

    https://www.cnblogs.com/tianma3798/p/5426869.html

    https://www.cnblogs.com/tianma3798/p/5426880.html

    二维码生成工具

    二维码识别工具

     

    更多:

    条形码简介_条形码基本常识_条形码基本原理

     业务处理之应用软删除 使用整理 IsDelete/SoftDelete

    C# 实现拼手气红包算法整理

    更多相关内容
  • 小知识:浅谈二维码的生成识别原理

    万次阅读 多人点赞 2019-12-26 15:14:15
    静态二维码 二进制生成图形码 二维码的定位 前言 不知不觉中,我们的生活到处充满了二维码。登录账户需要二维码;加好友需要二维码;共享单车需要二维码;商品包装上也有二维码;甚至连楼下卖水果的阿姨手里都...

     

    目录

    前言

    条形码

    静态二维码

    二进制生成图形码

    二维码的定位


    前言

    不知不觉中,我们的生活到处充满了二维码。登录账户需要二维码;加好友需要二维码;共享单车需要二维码;商品包装上也有二维码;甚至连楼下卖水果的阿姨手里都拿张二维码收款。那么,有没有想过这个二维码到底是什么东西呢?那么这个二维码的图案会不会多到不小心重合了呢?

     

    条形码

    在二维码出现之前,大行其道的还得是条形码,比如超市收银员扫的那个黑白条就是条形码。条形码是一维数据,当机器在水平方向上扫码这些粗细不同的黑白条时能够获取到其中的数据信息。相比于只在一个维度上携带信息的条形码,二维码在水平、垂直两个维度上都携带了数据。

    说白了,条形码和二维码都是对一些数字、字母、字符等人们共识的常规文字,转换成另外一种相对应的符号(黑白条、黑白方块),然后又让这些符号能够被机器识别和翻译成为常规文字。

     

    静态二维码

    二维码其实有点类似于我们学生时代考试中用到的答题卡。我们在考试中将需要选择的正确答案用2B铅笔✏️涂黑后,这个信息就可以被机器扫描出来。机器批阅的效率非常高,一秒钟就可以知道你考了多少分。

    当然,二维码和答题卡的原理还不太一样。二维码的生成原理并不难理解,其实就是把数据信息转换成对应的黑白方块,最后拼接成了一个日常可见的正方形图案。也就意味着,如果改变了数据信息,就会直接改变二维码的图案,这也是静态码的重要特点。

     

    二进制生成图形码

    说了半天,还是没用说到关键点,就是怎么就把数据信息转换成对应的条形码和二维码。

    这里先介绍一下划时代意义的“二进制”。二进制由0和1组成,二进制的过程也被称为编码过程,它可以将数字、字母等字符转换成由0和1组成的数字集合。

    下面是字符转二进制的转换表格,在线二进制转换http://www.txttool.com/wenben_strbinary.asp

    字符二进制
    000110000
    100110001
    200110010
    300110011
    1000110001 00110000
    1100110001 00110001
    a01100001
    b01100010
    c01100011
    ab01100001 01100010
    .00101110

    比如,百度的网址 “www.baidu.com ” 转换成二进制后如下所示:

    01110111011101110111011100101110011000100110000101101001011001000111010100101110011000110110111101101101

    如果,此时“0”对应白色方块、“1”对应黑色方块的话,就会出现许多大大小小黑白方块。最后把这些方块填入一个大的正方形内,就形成了二维码图案了。

     

    二维码的定位

    不知道,大家有没有好奇,为什么所有的二维码的边角都有三个大的黑色方块。如下图所示:

    其实,这三个大小相同的黑色方块是为了给二维做定位的。定位?啥意思?很简单啊,就是你的二维可能斜了、歪了、倒立了,相机就可以通过这三个黑方块点判断二维的正确存放位置了啊!💡叮咚!这下大家都明白了吧。

     

    展开全文
  • 所以,针对微信小程序的特点,封装了 weapp.qrcode.js ,用于在小程序中快速生成二维码。效果如下图: (此图片来源于网络,如有侵权,请联系删除! ) 下面来介绍一下使用方法: 使用 创建canvas标签 先在 wxml 文件...
  • 点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达 本文转自|新机器视觉生活在数字时代的我们,很多场合都用到了二维码。看网页要扫二维码,加好友要扫二维...

    点击上方“小白学视觉”,选择加"星标"或“置顶

    重磅干货,第一时间送达
    
    

    本文转自|新机器视觉

    生活在数字时代的我们,很多场合都用到了二维码。看网页要扫二维码,加好友要扫二维码,甚至在楼下卖水果的大爷,都支持扫码支付了。

    你有没有想过,这个长得很奇怪的东西,是怎么来的呢,又是什么原理呢?一起来看看下面的视频吧(视频下面还有图文版)。

    视频版——

    图文版——

    那么二维码是怎么出现的,是如何工作的呢?

    今天就和大家聊一聊

    二维码是谁发明的

    二维码 ,又称二维条码,二维条形码最早发明于日本,1994年日本 Denso Wave 发明的QR码,用于汽车制造,主要目的是在制作过程中保持每一个部件的行踪正确。

    它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化等特点。

    常见的二维码为QR Code

    最早于1994年被日本公司Denso Wave的腾弘原发明

    并且由原来的条形码改造而来

    相比条形码数据能力存储能力都大大提升

    最先的二维码是彩色的

    主要用来追踪其公司旗下汽车零部件维修等情况

    后来在此基础上

    为了提高工作效率Denso Wave公司又改进出了今天常见的黑白

    二维码的生成原理是:

    用特定的几何图形按编排规律在二维方向上分布

    采用黑白相见的图形来记录数据符号信息

    为了让计算机识别

    就要利用计算机内部逻辑

    用数字“0”和“1”作为代码

    同时使用若干个与二进制相对应的几何形体表示文字数值信息

    白块表示的就是二进制的“0”

    黑块就是“1”

    摄像头识别出颜色和排列就能解读出二维码包含的信息

    在QR码上

    不同的区域

    则表示着不同的信息

    安静区域:空白边框,可以将代码与其他打印信息隔离(例如,在脏信封上,报纸的黑白打印或污迹产品包装上)。

    Finder模式:三个角落中的大黑色和白色方块可以很容易地确认这是一个QR码。由于它们只有三个,所以很明显代码的哪个方向以及它指向的角度(除非代码在某种程度上被部分遮挡或损坏)。

    对齐模式:这确保代码可以被破译,即使它是扭曲的(以某个角度查看,打印在曲面上,等等)。

    定时模式:在三个取景器模式之间水平和垂直地运行,由交替的黑色和白色方块组成。时序模式可以轻松识别QR码中的各个数据单元,在代码损坏或失真时尤其有用。

    版本信息:QR码标准有各种不同版本;版本信息(位于两个取景器模式附近)简单地识别在特定代码中使用哪一个。

    数据单元:每个单独的黑色或白色方块不属于标准特征之一(时序,对齐和其他模式),包含代码中的一些实际数据。

    二维码有什么功能

    1、信息获取(名片、地图、WIFI密码、资料)。

    2、网站跳转(跳转到微博、手机网站、网站)。

    3、广告推送(用户扫码,直接浏览商家推送的视频、音频广告)。

    4、手机电商(用户扫码、手机直接购物下单)

    总的来说

    目前二维码已经成了生活中必不可少的一部分

    也确实为我们的生活带来了很多便捷~

    下载1:OpenCV-Contrib扩展模块中文版教程

    在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

    下载2:Python视觉实战项目52讲

    在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

    下载3:OpenCV实战项目20讲

    在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

    交流群

    欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

    展开全文
  • 浅析二维码基本原理

    万次阅读 2020-10-21 16:08:01
    自动识别技术就是针对这类需求发展起来,分为三部分:信息封装、信息传输信息识别。信息封装是指通过对物体的直观信息进行抽象,将信息转化为可编码的文字、图像等形式。然后通过数据编码对原始数据进

    识别技术的发展可以分为三个阶段:自然识别阶段、模式识别阶段、自动识别阶段。自然识别主要是通过人的感官来识别物体。随着科技的发展,人的感官认识能力逐渐的被机器模拟出来。模式识别是对物体的直观信息进行读取识别,而这些信息通常数据量大且较为复杂,所以模式识别技术很难应用到对识别效率要求较高的应用领域,例如交通运输、物流、邮政等。自动识别技术就是针对这类需求发展起来,分为三部分:信息封装、信息传输和信息识别。信息封装是指通过对物体的直观信息进行抽象,将信息转化为可编码的文字、图像等形式。然后通过数据编码对原始数据进行压缩,最后将编码得到的数据存储在特定的信息载体中。信息最终以信息载体来得到原始信息。信息识别就是通过专门的识别设备对物体信息载体进行识读,并通过解码来得到原始信息。自动识别技术虽然增加了信息封装的过程并需要借助特定的信息载体来进行信息传输,但是大大提高了识别效率。

    常见的物体信息载体有:条码(Bar Code)、射频标签(RFID)、磁条\卡、智能卡(IC卡)等,其中条码又可以分为一维码和二维码。

    二维码兼具了一维码的一些优点,例如成本低、传播方便等,并且二维码的存储容量与一维码相比,扩大了几十到几百倍,同时保密安全性更高。但也有一些不足,比如存储容量受条码大小限制,一般在几十到几百字节;抗污染能力不佳,容易折损,容错能力最大为30%;只读且容易被伪造;识别距离短,只能一对一识别。

     

    上世纪80年代末,美国、日本等国家的企业、研究机构开始进行二维码的研究,1989年美国国际资料公司发明了Data Matrix,原名为Data Code;PDF417码为1991年留美华人王寅敬博士发明并由讯宝(Symbol)公司制定完成;1992年美国知名的UPS(United Parcel Service)快递公司推出UPS码,即Maxicode二维码的前身;1994年,日本Denso公司发明了QR码(Quick Response Code);2009年微软推出了一种新的二维码“Microsoft Tag”,增加了色彩维度,因此又称为彩色条码。

    二维码标准化的国外研究机构主要有国际自动识别制造商协会(AIMI)、美国标准化协会(ANSI)以及后来成立的国际标准化组织/国际电工委员会第一联合委员会的条码自动识别技术委员会(ISO/IEC/JTCI/SC31),它们已经制作了一些码的国际标准,并且不断完善。国内则对二维码的标准化还不够完善。

    这篇文章对我们常用的二维码QR Code进行一个生成细节和原理分析,供感兴趣的同学一起学习。

     

    1.基础知识

     

    首先,我们先说一下二维码一共有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 的正方形。

    下面我们看看一个二维码的样例:

     

     

    1.1 定位图案

     

    • Position Detection Pattern是定位图案,用于标记二维码的矩形大小。这三个定位图案有白边叫Separators for Postion Detection Patterns。三个就可以标识一个矩形。

    • Timing Patterns也是用于定位的。原因是二维码有40种尺寸,尺寸过大了后需要有根标准线,不然扫描的时候可能会扫歪。

    • Alignment Patterns 只有Version 2以上(包括Version2)的二维码需要,同样用来定位。

    1.2 功能性数据

     

    • Format Information 存在于所有的尺寸中,用于存放一些格式化数据的。

    • Version Information 在 >= Version 7以上,需要预留两块3 x 6的区域存放一些版本信息。

     

    1.3 数据码和纠错码

     

    • 除了上述的那些地方,剩下的地方存放 Data Code 数据码 和 Error Correction Code 纠错码。

     

     

    2.数据编码

     

    我们先来说说数据编码。QR码支持如下的编码:

    Numeric mode 数字编码,从0到9。如果需要编码的数字的个数不是3的倍数,那么,最后剩下的1或2位数会被转成4或7bits,则其它的每3位数字会被编成 10bits,字符的个数编成多长还要看二维码的尺寸(Table 3)。

    Alphanumeric mode 字符编码。包括 0-9,大写的A到Z(没有小写),以及符号$ % * + – . / : 包括空格。这些字符会映射成一个字符索引表。如下所示:(其中的SP是空格,Char是字符,Value是其索引值) 编码的过程是把字符两两分组,然后转成下表的45进制,然后转成11bits的二进制,如果最后有一个落单的,那就转成6bits的二进制。字符的个数需要根据不同的Version尺寸编成9, 11或13个二进制(Table 3)。

     

     

    Byte mode, 字节编码,可以是0-255的ISO-8859-1字符。有些二维码的扫描器可以自动检测是否是UTF-8的编码。

    Kanji mode 这是日文编码,也是双字节编码。同样,也可以用于中文编码。日文和汉字的编码会减去一个值。如:在0X8140 to 0X9FFC中的字符会减去8140,在0XE040到0XEBBF中的字符要减去0XC140,然后把结果前两个16进制位拿出来乘以0XC0,然后再加上后两个16进制位,最后转成13bit的编码。如下图示例:

     

     

    Extended Channel Interpretation (ECI) mode 主要用于特殊的字符集。并不是所有的扫描器都支持这种编码。

    Structured Append mode 用于混合编码,也就是说,这个二维码中包含了多种编码格式。

    FNC1 mode 这种编码方式主要是给一些特殊的工业或行业用的。比如GS1条形码之类的

    简单起见,后面三种不会在本文中讨论。

    下面两张表中,

    • Table 2 是各个编码格式的“编号”,这个东西要写在Format Information中。注:中文是1101

    • Table 3 表示了,不同版本(尺寸)的二维码,对于,数字,字符,字节和Kanji模式下,对于单个编码的2进制的位数。(在二维码的规格说明书中,有各种各样的编码规范表,后面还会提到)

       

     

     

    下面我们看几个示例:

     

    2.1 示例一:数字编码

     

    在Version 1的尺寸下,纠错级别为H的情况下,编码:01234567

    1. 把上述数字分成三组: 012 345 67

    2. 把他们转成二进制:  012 转成 0000001100;345 转成 0101011001;67 转成 1000011。

    3. 把这三个二进制串起来: 0000001100 0101011001 1000011

    4. 把数字的个数转成二进制 (version 1是10 bits,Table3 ): 8个数字的二进制是 0000001000

    5. 把数字编码的标志0001和第4步的编码加到前面:  0001 0000001000 0000001100 0101011001 1000011

     

    2.2 示例二:字符编码

     

    在Version 1的尺寸下,纠错级别为H的情况下,编码: AC-42

    1. 从字符索引表中找到 AC-42 这五个字条的索引 (10,12,41,4,2)

    2. 两两分组: (10,12) (41,4) (2)

    3.把每一组转成11bits的二进制:

            (10,12) 10*45+12 等于 462 转成 00111001110
            (41,4) 41*45+4 等于 1849 转成 11100111001
            (2) 等于 2 转成 000010

    4. 把这些二进制连接起来:00111001110 11100111001 000010

    5. 把字符的个数转成二进制 (Version 1为9 bits,Table3 ): 5个字符,5转成 000000101

    6. 在头上加上编码标识 0010 和第5步的个数编码:  0010 000000101 00111001110 11100111001 000010

     

     

    3.结束符和补齐符

     

    假如我们有个HELLO WORLD的字符串要编码,根据上面的示例二,我们可以得到下面的编码,

     

    编码

    字符数

    HELLO WORLD的编码

    0010

    000001011

    01100001011 01111000110 10001011100 10110111000 10011010100 001101


    3.1 结束符

     

    我们还要加上结束符:

     

    编码

    字符数

    HELLO WORLD的编码

    结束符

    0010

    000001011

    01100001011 01111000110 10001011100 10110111000 10011010100 001101

    0000

     

    并按8bits重排——如果所有的编码加起来不是8个倍数我们还要在后面加上足够的0,比如上面一共有78个bits,所以,我们还要加上2个0,然后按8个bits分好组:

    00100000   01011011   00001011   01111000   11010001   01110010   11011100   01001101   01000011   01000000

     

    3.2 补齐符(Padding Bytes)

     

    最后,如果如果还没有达到我们最大的bits数的限制,我们还要加一些补齐码(Padding Bytes),Padding Bytes就是重复下面的两个bytes:11101100 00010001 (From Spec)。关于每一个Version的每一种纠错级别的最大Bits限制,可以参看QR Code Spec的第28页到32页的Table-7。

    假设我们需要编码的是Version 1的Q纠错级,那么,其最大需要104个bits,而我们上面只有80个bits,所以,还需要补24个bits,也就是需要3个Padding Bytes,我们就添加三个,于是得到下面的编码:

    00100000 01011011 00001011 01111000 11010001 01110010 11011100 01001101 01000011 01000000 11101100 00010001 11101100

    上面的编码就是数据码了,叫Data Codewords,每一个8bits叫一个codeword,我们还要对这些数据码加上纠错信息。

     

     

    4.纠错码

     

    上面我们说到了一些纠错级别,Error Correction Code Level,二维码中有四种级别的纠错,这就是为什么二维码有残缺还能扫出来,也就是为什么有人在二维码的中心位置加入图标。

     

    水平级别        错误修正容量

    L水平

    7%的字码可被修正

    M水平

    15%的字码可被修正

    Q水平

    25%的字码可被修正

    H水平

    30%的字码可被修正

     

    那么,QR是怎么对数据码加上纠错码的?首先,我们需要对数据码进行分组,也就是分成不同的Block,然后对各个Block进行纠错编码,对于如何分组,我们可以查看QR Spec中的Table-13到Table-22的定义表。

    举个例子:上述的Version 5-Q纠错级:需要4个Blocks(2个Blocks为一组,共两组),头一组的两个Blocks中各15个字节+ 各 9个字节的纠错码(注:表中的codewords就是一个8bits的字节,c = k + 2 * r)。

    下图给一个5-Q的示例(因为二进制写起来会让表格太大,所以,我都用了十进制,我们可以看到每一块的纠错码有18个codewords,也就是18个8bits的二进制数)

     

    数据对每个块的纠错码

    1

    1

    67 85 70 134 87 38 85 194 119 50 6 18 6 103 38

    213 199 11 45 115 247 241 223 229 248 154 117 154 111 86 161 111 39

    2

    246 246 66 7 118 134 242 7 38 86 22 198 199 146 6

    87 204 96 60 202 182 124 157 200 134 27 129 209 17 163 163 120 133

    2

    1

    182 230 247 119 50 7 118 134 87 38 82 6 134 151 50 7

    148 116 177 212 76 133 75 242 238 76 195 230 189 10 108 240 192 141

    2

    70 247 118 86 194 6 151 50 16 236 17 236 17 236 17 236

    235 159 5 173 24 147 59 33 106 40 255 172 82 2 131 32 178 236

     

    注:二维码的纠错码主要是通过Reed-Solomon error correction(里德-所罗门纠错算法)来实现的。里面有很多的数学计算,比如:多项式除法,把1-255的数映射成2的n次方(0<=n<255)的伽罗瓦域Galois Field。以及基于这些基础的纠错数学公式。

     

     

    5.最终编

     

    5.1 穿插放置

     

    接下来是把数据码和纠错码的各个codewords交替放在一起。规则如下:

    对于数据码:把每个块的第一个codewords先拿出来按顺度排列好,然后再取第一块的第二个,如此类推。如:上述示例中的Data Codewords如下:

     

    块 1

    67

    85

    70

    134

    87

    38

    85

    194

    119

    50

    6

    18

    6

    103

    38

     

    块 2

    246

    246

    66

    7

    118

    134

    242

    7

    38

    86

    22

    198

    199

    146

    6

     

    块 3

    182

    230

    247

    119

    50

    7

    118

    134

    87

    38

    82

    6

    134

    151

    50

    7

    块 4

    70

    247

    118

    86

    194

    6

    151

    50

    16

    236

    17

    236

    17

    236

    17

    236

    我们先取第一列的:67, 246, 182, 70

    然后再取第二列的:67, 246, 182, 70, 85,246,230 ,247

    如此类推:67, 246, 182, 70, 85,246,230 ,247 ……… ,38,6,50,17,7,236

    对于纠错码,也是一样:

    块 1

    213

    199

    11

    45

    115

    247

    241

    223

    229

    248

    154

    117

    154

    111

    86

    161

    111

    39

    块 2

    87

    204

    96

    60

    202

    182

    124

    157

    200

    134

    27

    129

    209

    17

    163

    163

    120

    133

    块 3

    148

    116

    177

    212

    76

    133

    75

    242

    238

    76

    195

    230

    189

    10

    108

    240

    192

    141

    块 4

    235

    159

    5

    173

    24

    147

    59

    33

    106

    40

    255

    172

    82

    2

    131

    32

    178

    236

    和数据码取的一样,得到:213,87,148,235,199,204,116,159,…… …… 39,133,141,236

    然后,再把这两组放在一起(纠错码放在数据码之后)得到:

    67, 246, 182, 70, 85, 246, 230, 247, 70, 66, 247, 118, 134, 7, 119, 86, 87, 118, 50, 194, 38, 134, 7, 6, 85, 242, 118, 151, 194, 7, 134, 50, 119, 38, 87, 16, 50, 86, 38, 236, 6, 22, 82, 17, 18, 198, 6, 236, 6, 199, 134, 17, 103, 146, 151, 236, 38, 6, 50, 17, 7, 236, 213, 87, 148, 235, 199, 204, 116, 159, 11, 96, 177, 5, 45, 60, 212, 173, 115, 202, 76, 24, 247, 182, 133, 147, 241, 124, 75, 59, 223, 157, 242, 33, 229, 200, 238, 106, 248, 134, 76, 40, 154, 27, 195, 255, 117, 129, 230, 172, 154, 209, 189, 82, 111, 17, 10, 2, 86, 163, 108, 131, 161, 163, 240, 32, 111, 120, 192, 178, 39, 133, 141, 236

    这就是我们的数据区。

     

    5.2 Remainder Bits

     

    最后再加上Reminder Bits,对于某些Version的QR,上面的还不够长度,还要加上Remainder Bits,比如:上述的5Q版的二维码,还要加上7个bits,Remainder Bits加零就好了。关于哪些Version需要多少个Remainder bit,可以参看QR Code Spec的Table-1。

     

     

    6.二维码图像的画制

     

    6.1 Position Detection Pattern

     

    首先,先把Position Detection图案画在三个角上。(无论Version如何,这个图案的尺寸就是这么大)。

     

     

    6.2 Alignment Pattern

     

    然后,再把Alignment图案画上(无论Version如何,这个图案的尺寸就是这么大)。

     

    关于Alignment的位置,可以查看QR Spec中Table-E.1的定义表(下表是不完全表格)。

     

     

    下图是根据上述表格中的Version8的一个例子(6,24,42)。

     

     

     

    6.3 Timing Pattern

     

    接下来是Timing Pattern的线:

     

     

    6.4 Format Pattern

     

    再接下来是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,从而造成全部为白色,这会增加我们的扫描器的图像识别的困难。

    下面是一个示例:

     

     

    关于Error Correction Level如下表所示:

     

     

    关于Mask图案如后面的Table 23所示。

     

    6.5 Version Information

     

    再接下来是Version Information(版本7以后需要这个编码),下图中的蓝色部分。

     

     

    Version Information一共是18个bits,其中包括6个bits的版本号以及12个bits的纠错码,下面是一个示例:

     

     

    而其填充位置如下:

     

     

    6.6 数据和数据纠错码

     

    然后是填充我们的最终编码,最终编码的填充方式如下:从右下角开始沿着红线填我们的各个bits,1是黑色,0是白色。如果遇到了上面的非数据区,则绕开或跳过。

     

     

     

    6.7 掩码图案

     

    这样下来,我们的图就填好了,但是,也许那些点并不均衡,如果出现大面积的空白或黑块,会告诉我们扫描识别的困难。所以,我们还要做Masking操作。QR有8个Mask可以使用,如下所示:其中,各个mask的公式在各个图下面。所谓mask,就是和上面生成的图做XOR操作。Mask只会和数据区进行XOR,不会影响功能区。(注:选择一个合适的Mask也是有算法的)

     

     

    其Mask的标识码如下所示:(其中的i,j分别对应于上图的x,y)

     

     

    下面是Mask后的一些样子,我们可以看到被某些Mask XOR了的数据变得比较零散了。

     

     

    Mask过后的二维码就成最终的图了。

     

    Reference:

    1.https://coolshell.cn/articles/10590.html

    2.盛秋康,二维码编解码技术的研究与应用

    3.https://www.swisseduc.ch/informatik/theoretische_informatik/qr_codes/docs/qr_standard.pdf

     

                                                                    (完)

     

     

                                         谢谢你的关注。

    展开全文
  • 文章目录二维码与一维码二维码编解码库二维码生成Libqrencode(QRencode)二维码生成二维码识别QZXing二维码识别QZXing编译QT调用QZXing 二维码(QR Code)是用某种特定的几何图形按一定规律在平面(二维方向)分布的...
  • 纠错率计算规则: 举个:在二维码版本纠错级确定的情况下,其实它所能容纳的码字总数纠错码字数也就确定了,比如:版本10,纠错等级时H时,总共能容纳346个码字,其中224个纠错码字。 就是说二维码区域中大约1/...
  • 二维码识别

    千次阅读 2018-12-06 09:58:10
    版权声明:本文为博主原创文章,未经博主允许不得转载。...二维码 (2-dimensional bar code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的。 在许多种类...
  • 二维条码/二维码的分类

    千次阅读 2018-05-30 08:53:13
    转载:https://blog.csdn.net/haohaojian/article/details/55254825二维码的分类1... 矩阵式二维码具有代表性的矩阵式二维条码有:Code One、Maxi Code、QR Code、 Data Matrix等在目前几十种二维要码中,常用的码制...
  • 条形码和二维码的原理简介

    千次阅读 2017-09-23 16:48:50
    转自: http://blog.csdn.net/zxc024000/article/details/51135332 ... 一维码: ...条形码由宽度不同、反射率不同的条(黑色)空(白色)组成。按照特定的编码规则编制,用来表达一组数字、字母信息
  • 二维码全新认识

    千次阅读 2016-09-14 10:09:31
    目前二维码已经覆盖了大街小巷,到处可见,仿佛世界已经是二维码的时间!如果人类可以到达外太空,那么二维码估计会在那里燃烧!!今天打算对二维码做一个全面的了解。 PS:本文内容摘录至网上!只是一个整理的文章...
  • 二维码(QR code)基本结构及生成原理

    万次阅读 多人点赞 2016-11-27 00:14:49
    什么是二维码二维码 (2-dimensional bar code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的。在许多种类的二维条码中,常用的码制有:Data Matrix, Maxi ...
  • 如下图能够通过字符串生成二维码 编程环境 二维码编码:Qt5.14 + qrcode库 二维码解码:Qt5.14 + QZXing库 qrcode库下载地址:https://fukuchi.org/works/qrencode/ QZXing库下载地址:...
  • 各类码图如二维码,验证码此类码图的生成,实际原理就是后台通过某种规则去生成图片流,将图片流返回给前端后,前端进行显示。后续内容将展开BufferedImage的实际应用。 二.BufferedImage 1)是码图相关的一种非常...
  • 一维码与二维码对比介绍

    千次阅读 2018-11-14 21:15:41
    1.1 定义 一维码是将宽度不等的多个黑条空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的一维码是由反射率相差很大的黑条(简称条)白条(简称空)排成的平行线图案。 1.2 用处 一维码...
  • 原来Java生成二维码这么简单

    千次阅读 2020-09-21 13:34:54
    一、二维条码/二维码(2-dimensional bar code)的概念 用某种特定的几何图形按一定规律再平面(二维方向上)分布的黑白相间的图形记录数据符号信息的图形。 二、二维码的发展历史 一维码:只能存储数字、字母, ...
  • QR二维码编码原理

    千次阅读 2019-01-17 10:44:52
    QR码属于矩阵式二维码中的一个种类,由DENSO(日本电装)公司开发,由JISISO将其标准化。QR码的样子其实在很多场合已经能够被看到了,我这还是贴个图展示一下: 这个图如果被正确解码,应该看到我的名字邮箱。 ...
  • 摘 要:条码技术是如今应用最广泛的识别输入技术之一,由于其包含的信息量大,识别错误率低而在各个方面得到很大的重视。它发展迅速并被广泛应用于于工业、商业、图书出版、医疗卫生等各行各业。由我国目前发展...
  • QT中实现二维码图片生成

    千次阅读 2018-12-26 10:59:11
    Linux环境下QT中实现二维码生成有两种方法,这两种方法都需要用到开源的代码--qrencode。第一种方法是下载qrencode源码后,将其移植到目标板子上,然后在程序中包含其路径进行使用;第二种方法是将qrencode源码添加...
  • 二维码

    千次阅读 2017-03-15 14:08:17
    QR码属于矩阵式二维码中的一个种类,由DENSO(日本电装)公司开发,由JISISO将其标准化。QR码的样子其实在很多场合已经能够被看到了,我这还是贴个图展示一下: 这个图如果被正确解码,应该看到我的名字邮箱。 ...
  • 基于MATLAB的条形码二维码识别系统

    千次阅读 2021-08-31 11:59:49
    条码图像经过预处理后得到的是二值图像,该点的颜色信息在阈值变换时已经定义,用2550表示白黑色。我们从条码的左边开始取点,若遇到点的灰度值由255变到0即由点的颜色由白色变为黑色,则表示检测到条,记录下该...
  • QR码属于矩阵式二维码中的一个种类,由DENSO(日本电装)公司开发,由JISISO将其标准化。QR码的样子其实在很多场合已经能够被看到了。 (1)位置探测图形、位置探测图形分隔符:用于对二维码的定位,对每个QR码来说...
  • 二维码打印

    2019-10-02 12:41:38
    1. 二维码简介 二维码(2-dimensional bar code),又称二维条码,它是用特定的几何图形按一定规律在平面(二维方向)上分布的黑白相间的图形,是所有信息数据的一把钥匙。在现代商业活动中,可实现的应用十分...
  • 一篇文章让你知道ZXing是怎么知道图片中是否有二维码的。
  • 二维码的原理

    2021-09-30 07:36:28
    不知不觉中,我们的生活到处充满了二维码。登录账户需要二维码;加好友需要二维码;共享单车需要二维码;商品包装上也有二维码;甚至连楼下卖水果的阿姨手里都拿张二维码收款。那么,有没有想过这个二维码到底是...
  • 特点:实现简单、但局限于亮度 清晰度好,没有扭曲变形的情况。 main.cpp #include "iostream" #include "opencv2/opencv.hpp" #include "zbar.h" using namespace std; using namespace cv; using namespace zbar...
  • 二维码生成原理

    万次阅读 2018-03-20 12:07:04
    QR码属于矩阵式二维码中的一个种类,由DENSO(日本电装)公司开发,由JISISO将其标准化。QR码的样子其实在很多场合已经能够被看到了,我这还是贴个图展示一下: 这个图如果被正确解码,应该看到我的名字邮箱。 二...
  • Opencv的使用小教程3——利用轮廓检测实现二维码定位二维码具有什么特征识别二维码的流程1、预处理图像2、寻找轮廓 好好学习噢! 二维码具有什么特征 二维码就是两个维度的条形码,平常我们在生活中随处可见,“QR...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,181
精华内容 4,472
关键字:

二维码的定义和特点