参考:

  • 二维码(QR code)基本结构及生成原理(附标准下载)
  • 二维码到底是怎么被识别的?黑白小方块又是怎么储存数据的?

一、矩阵式二维条码QR

  • 矩阵式二维条码(又称棋盘式二维条码)
  • QR码的设计理念之一就是尽可能地容错和自适应
  • 它是在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码,扫二维码时将色块转为0和1
  • 在矩阵相应元素位置上,用点(方点、圆点或其他形状)的出现表示二进制“1”,点的不出现表示二进制的“0”.

二、QR码的特点

1.存储大容量信息

  • 传统的条形码只能处理20位左右的信息量,与此相比,QR码可处理条形码的几十倍到几百倍的信息量。

  • 支持所有类型的数据。(如:数字、英文字母、日文字母、汉字、符号、二进制、控制码等)。

2.在小空间内打印

  • QR码使用纵向和横向两个方向处理数据
  • 如果是相同的信息量,QR码所占空间为条形码的十分之一左右。

3.纠错

  • 纠错功能

    • 即使部分编码变脏或破损,也可以恢复数据
  • 数据恢复以码字为单位(是组成内部数据的单位,在QR码的情况下,每8比特代表1码字),最多可以纠错约30%

  • QR码的纠错功能原理

    • 是通过将RS编码附加到原数据中的方式实现的,
    • 由于RS编码的存在,即使在QR码中出现一定数量的像素损坏或丢失,也能够通过纠错机制来保证数据的完整性和准确性。
    • 因此,在不同的纠错等级下,QR码所能存储的真实数据容量并没有太大差异
    • RS编码提供了一定的冗余,增强了QR码的容错性
  • 等级选择

    • 在工厂等容易沾染赃物的环境下,可以选择级别Q或H
    • 在不那么脏的环境下,且数据量较多的时候,也可以选择级别L。
    • 一般情况下用户大多选择级别M。
纠错等级 纠错水平
L 7%
M 15%
Q 25%
H 30%

三、码元结构

  • 码元结构”是指二维码中的码元数,越大存储信息越多。
  • 最小21X21,最大177*177,每隔一个横纵加4,共40个版本

四、QR码的编码过程

1.数据分析

  • 确定QR码的字符类型、纠错等级以及数据内容,需要将数据转换为符号字符,并根据所选纠错等级计算出相应的冗余信息。

2.数据编码

  • 将符号字符序列转化为二进制位流,并组织成若干个数据码字。
  • 每个数据码字中包含固定数量的比特位和一个检验码字(纠错码)。
  • 将所有的数据码字和纠错码字组合在一起,就构成了最终的QR码。

具体来说,数据编码过程可以分为以下几个步骤:

  1. 确定所需数据容量和纠错等级,根据所选纠错等级计算出纠错码字数目和位置。
  2. 将原始数据按照所选字符集进行编码,得到符号字符序列。
  3. 根据所选字符类型和编码规则,将符号字符序列转化为二进制位流。
  4. 将位流分割成若干个数据码字,每个数据码字包含一定数量的比特位和一个检验码字。检验码字通过纠错编码算法生成。
  5. 将所有的数据码字和纠错码字组合在一起,形成QR码的编码序列。
格式 容量
数字 最多7089字符
字母 最多4296字符
二进制(8bit) 最多2953字节
中文汉字 最多984字符(UTF-8)

五、扫码

扫二维码时按读取顺序(已经支持多种角度)将色块转为0和1。

1.定位

  • 下方的三个大框、一个小框和两个横条用于定位

2.了解基本信息

  • 红色区域:二维码的版本信息、数据编码信息等

3.存储区域

  • 下方绿色区域,包含纠错和实际数据

  • 黄色是纠错区域,随着纠错等级增加,可存储区域减小

    • 在不同的纠错等级下,QR码所能存储的真实数据容量并没有太大差异
  • 存储数据较多时,可以选择较低的纠错等级

4.掩码

  • 可以看到:

    • 二维码并没有出现大面积的黑和白,黑和白的分配较为均匀
    • 为了方便扫描,对二维码进行了掩码操作
    • 一般会在下面的款式选择一个对二维码处理使其均匀

六、制作与识别

1.制作

import qrcode# 创建 QRCode 对象,并指定需要生成二维码的内容
qr = qrcode.QRCode(version=1,box_size=10,border=5,error_correction=qrcode.constants.ERROR_CORRECT_Q,  # 设置错误纠正等级为 Q
)qr.add_data("https://www.baidu.com")  # 内容
qr.make(fit=True)  # 生成可以使用 make_image() 方法创建图像的 QR 码图案# 生成图片,并保存到本地文件
img = qr.make_image(fill_color="black", back_color="#F5DEB3")  # 设置填充色为黑色,背景颜色为 "#F5DEB3"(淡褐色)
img.save("1.png")

2.识别

import cv2  # 导入 OpenCV 库,用于处理图像
from pyzbar.pyzbar import decode  # 导入 pyzbar 库,用于识别二维码# 使用 OpenCV 库读取图像文件
img = cv2.imread("1.png")# 使用 pyzbar 库对图像中的二维码进行解码
decoded_objs = decode(img)# 遍历解码后的对象列表,并打印出二维码包含的数据信息
for obj in decoded_objs:print(f"Data[{obj.data.decode('utf-8')}]")

二维码原理、制作和识别相关推荐

  1. 二维码的制作与识别使用了什么技术?

    二维码的制作与识别使用了什么技术,有哪些优缺点,发展前景是怎样的? 我们通常只需要使用在线二维码生成器就可以制作二维码,但你知道它是怎么制作的吗?具体来讲,它所使用的技术就是计算机图像处理技术,在线二 ...

  2. 微信内置浏览器动态生成二维码并长按识别

    现如今围绕微信生态相关开发已经非常常见,本期带来如何通过 qrcode.js 实现微信内置浏览器动态生成二维码并能够长按识别 以及 通过 html2canvas 生成图片并长按保存 说几个知识点 微信 ...

  3. 二维码原理--开胃小知识

    二维码是什么原理?不知道从什么时候开始,我们的生活突然之间就充满了二维码,看网页要扫二维码,加好友要扫二维码,现在连楼下卖草莓的大爷都支持扫码支付,那么,你有没有想过,这个长得很奇怪的二维码,到底是怎 ...

  4. 手机扫描条形码二维码原理和实现等网上资料整理

    有志于要从事条形码和二维码开发的同学,和我一样想多了解这方面的东西.但是苦于网上资源甚少,我已经把现有资源整理如下. 原理.实现方案.代码资源.规则是否通用比如加密如何实现? ============ ...

  5. 各类炫酷二维码的制作(附带GUI工具开发)

    作者:小小明 效果展示 动态二维码 用头像作底图的个人微信二维码 多张二维码组合动图 动态二维码的制作 首先打开个人开发的二维码生成器: 然后输入二维码要保存的网址.二维码保存位置,以及动图所在位置: ...

  6. 二维码如何制作?快速制作二维码的教程在这里

    二维码如何制作?在我们的日常生活中总是会看到形形色色的二维码图片,在我们的日常生活中少不了需要时时接触二维码,除了系统自动生成二维码之外,其实我们还可以借助一些软件来进行二维码的生成,这里小编就来给大 ...

  7. Android二维码原理与优化方向

    困惑 做过Android的二维码扫描的童鞋可能会遇到过,很多二维码识别不了,或者识别速度慢.一般造成这个识别不出来的原因,大概以下几点: Android手机配置不一样,手机像素高低也有不同,有的手机还 ...

  8. PHP二维码的生成与识别案例

    二维码的分类线性堆叠式二维码 矩阵式二维码 二维码的优缺点 优点 信息容量大 编码范围广 容错能力强 译码可靠性高 可引入加密措施 成本低,易制作 缺点 二维码技术成为手机病毒.钓鱼网站传播的新渠道 ...

  9. 一维二维码的提取、识别和产生

    一维二维码的提取.识别和产生 零.相关说明:     在"jsxyhelu.cnblogs.com/机器视觉"栏目主要介绍和图像处理和机器视觉相关的的成套的解决方案.思路和软件集. ...

  10. PHP二维码在线制作生成系统源码 无需数据库 带logo图标

    简介: PHP二维码在线制作生成系统源码 无需数据库 带logo图标 网盘下载地址: http://kekewl.net/Myae89V9DX00 图片:

最新文章

  1. 华为云交付项目服务器配置表,云端服务器配置表
  2. 2020校招薪酬大比拼,你被倒挂了没?
  3. ICO的“金三角”与区块链的“新大陆”
  4. php 获取用户名,PHP如何获取当前windows系统的登录用户名
  5. 方立勋_30天掌握JavaWeb_(Servlet+JSP+JavaBean实现)用户注册和登陆
  6. http端口_PhpStorm 修改默认端口号63342
  7. new操作符的作用是什么
  8. 视频大压缩的具体操作方法
  9. mac终端shell颜色
  10. 金庸15部小说精校版
  11. 域名邮箱和邮件服务器
  12. 第五次作业:Excel制作英文课程表
  13. 2019年高三自主招生面试考生如何自我介绍?范文3篇整理
  14. 计算机文化基础项目化教程答案,第七版计算机文化基础实践教程 第3-4章习题答案及解析...
  15. 安卓平板隐藏虚拟按键_实现安卓设备虚拟按键隐藏和显示的方法和系统的制作方法...
  16. asp.net是什么?
  17. 原装linux系统装win7系统,网购本自带Linux系统,要重装win7旗舰要到店里去吗?
  18. 以太网通信连接不上自检步骤
  19. ETH 2.0新纪元开启,究竟能带来什么?
  20. Isight2019 集成MATLAB2019 (64位)的优化问题

热门文章

  1. 柴油发电机的运作方式
  2. HTML练习制作邮箱登陆界面
  3. PS-nineday-修复工具组(人物祛斑)
  4. 解决chrome 跨越问题
  5. HDR dataset
  6. C++ Shell扩展 右键添加属性页
  7. js异步函数(async/await)
  8. 报表工具对比之润乾报表与JFreeReport
  9. IDEA Project Structure(项目结构)详解
  10. efa v4 和exchange 安装开源垃圾邮件网关在Centos7中安装