《OpenCV系列教程》
二维码有很多种,我们今天介绍的就是QR这种二维码,全名是 Quick Response Code,下面我们就称作QR码。
博客分为两部分,第一部分是QR码的基础知识,第二部分是通过OpenCV识别QR码

一 、QR码的基础知识

什么是QR码? QR码能保存的数据量有多少? 如何扫描QR码?让我们了解一下QR码的基础知识。了解创建、读取二维码的技术。

什么是QR码

QR码就是二维版本的条形码,从我们的生活中就可以经常看到,比如超市的商品码,我们微信、支付宝使用的二维码,都是这种类型的二维码。最初是为汽车工业物流中的流程优化而开发的,随着智能手机的普遍应用,QR码进入了移动领域。“QR”是“Quick Response”的缩写,它指的就是可以对隐藏在二维码中的数据实现快速读取。QR码之所以能够快速的普及,就是因为这项技术是开源的。也就是说每个人都可以使用。QR码相对传统条形码的优势是数据存储量大和高容错性。

QR码的结构是如何组成的

由黑色和白素像素块组成的方格图案,乍一看就像是一个小型的迷宫游戏,黑色、白色块的位置就像是随机分布的。但如果你贴近仔细看,图像中的某些部分还是很容易辨认出来的,这些部分就是方便扫描器来识别QR码,它们必须是黑色的,他们是QR码的附加信息,这些附加元素确保扫描器能正确的读取QR码中的信息。

定位标识(Positioning markings)
标明二维码的方向。

对齐标记(Alignment markings)
如果二维码很大,这些附加元素帮助定位。

计算模式(Timing pattern)
通过这些线,扫描器可以识别矩阵有多大。

版本信息(Version information)
这里指定正在使用的QR码的版本号,目前有QR码有40个不同的版本号。 用于销售行业的的版本号通常为1-7.

格式信息(Format information)
格式模式包含关于容错和数据掩码模式的信息,并使得扫描代码更加容易。。

数据和错误校正值(Data and error correction keys)
这些模式保存实际数据。。

宁静区域(Quiet zone)
这个区域对于扫描器来说非常重要,它的作用就是将自身与周边的进行分离。

QR码受损会发生什么事情?

为了确保QR码中包含的信息即使被损坏也能够被读取,数据值包含重复的信息(冗余值)。因此,即使多达30%的二维码结构被破坏,而不影响二维码的可读性。

都那些信息可以存储在QR码中呢?

QR码的存储空间多达7089位或者是4296个字符,包括标点符号和特殊字符,都可以写入RQ码中。除了数字和字符之外,还可以对单词和短语(例如因特网地址)进行编码。随着更多的数据被添加到QR码,代码大小增加,代码结构变得更加复杂。

如何创建一个QR码

创建的方式很多啊,网页版本的就非常多。

二、OpenCV如何识别QR码

项目位置:OpenCV-Sample
代码位置:101-ScannerQRCode.py

import cv2
import numpy as npdef display(im, bbox):n = len(bbox)for j in range(n):cv2.line(im, tuple(bbox[j][0]), tuple(bbox[(j + 1) % n][0]), (255, 0, 0), 3)# Display resultscv2.imshow("Results", im)inputImage = cv2.imread("./res/QR.png")qrDecoder = cv2.QRCodeDetector()# Detect and decode the qrcode
data, bbox, rectifiedImage = qrDecoder.detectAndDecode(inputImage)
if len(data) > 0:print("Decoded Data : {}".format(data))display(inputImage, bbox)rectifiedImage = np.uint8(rectifiedImage);cv2.imshow("Rectified QRCode", rectifiedImage);
else:print("QR Code not detected")cv2.imshow("Results", inputImage)cv2.waitKey(0)
cv2.destroyAllWindows()

通过OpenCV识别QR二维码相关推荐

  1. opencv识别彩色二维码

    记录一下识别彩色二维码过程,以及当中遇到的问题和解决办法 1. 由于过程中图片处理需要用到灰度图像,所以读取原图之后,需要转换一个grayImage (CV_BGR2GRAY) 2. Gaussian ...

  2. 【OpenCV 4开发详解】QR二维码检测

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  3. 【Matlab编程实现常见小问题之二】Matlab如何实现QR二维码的生成与识别

    本篇文章中,旨在解决如何用Matlab编程实现QR二维码的生成与识别.编程环境是Matlab2012a,所用的开源库是ZXing,ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码.目 ...

  4. Android OpenCV(四十):QR二维码检测与识别

    QR二维码 QR码(英语:Quick Response Code:全称为快速响应矩阵图码)是二维码的一种,于1994年由日本DENSO WAVE公司发明.QR来自英文Quick Response的缩写 ...

  5. 【opencv学习之四十六】OpenCV4.2 QR二维码识别及定位

    首先系统得安装opencv4以上的库,代码实验了一下,相比zxing和zbar,更简洁一些,并且提供了二维码定位: 代码如下: #include <iostream> #include & ...

  6. 【opencv】生成二维码并识别

    [opencv]生成二维码并识别 生成二维码 图片识别 摄像头识别 生成二维码 import qrcode #模块导入 #调用qrcode的make()方法传入url或者想要展示的内容 img = q ...

  7. Linux OpenCV + zBar 实现二维码识别

    第一个版本 参考:https://blog.csdn.net/pyt1234567890/article/details/109597353 特点:实现简单.但局限于亮度 清晰度好,没有扭曲变形的情况 ...

  8. 【图像处理】QR二维码识别与生成matlab代码

    1 简介 QR二维码的识别技术是数字图像处理领域研究的一个热门课题.随着物联网的不断发展,QR二维码凭借其强大的信息存储能力,方便快捷的识读优点,安全可靠的编码技术,已经逐渐地应用于各个行业领域.同时 ...

  9. Qt开发二维码工具QR二维码生成和识别支持批量生成免费使用

    简介 Qt编写,使用第三方库libqrencode和QZxing,支持QR二维码生成和识别,二维码可批量生成,支持中文,还可以设置二维码大小颜色.免费使用,下载链接在本文底部,拿走不用谢,假如您慷慨大 ...

最新文章

  1. 训练数据也外包?这家公司“承包”了不少注释训练数据,原来是这样做的……...
  2. windows安装oracle11g
  3. 三星专业级360度视频拍摄设备登场,能直接传输3D VR视频
  4. kaggle房价预测特征意思_Kaggle实战-波士顿房价预测
  5. 需要某个字体包才能正确显示此页面_如何做设计,才能做好设计
  6. 窗口之间值、控件的传递
  7. iOS开发篇——OC之NSNumber数字对象讲解
  8. Vue 与 Web Components
  9. android jni示例,Android Jni代码示例讲解
  10. 大一计算机课程ppt作业,《计算机应用基础》课程第4次作业-PPT操作题答案步骤...
  11. crispr基因编辑_用CRISPR编程基因组
  12. Android圆盘刻度,类似体重测试仪,效果不错哦
  13. 20190803——python文件操作
  14. Win11怎么把手机投屏到电脑上?
  15. 2016年求职找工作千万小心这些求职陷阱
  16. 前后端项目的糅合模式mashup
  17. 计算机基础知识边框,计算机基础知识2
  18. 小龙虾炒菜机器人_开挖掘机炒小龙虾?机器人餐厅?吃饭竟也能如此炫酷!
  19. 视频教程-Ajax+jquery从入门到精通2017视频教程-JavaScript
  20. RAID不同模式之间的区别

热门文章

  1. 非常详细的Series核心操作使用详解
  2. 2016ACM/ICPC亚洲区大连站-补题
  3. python求圆柱表面积_ZZULIOJ.1011: 圆柱体表面积 —— 1021:三个整数的最大值(C语言 Vs Python)...
  4. Ollydbg的断点设置
  5. 金字塔pyramid
  6. Xcode10 报错 target xxx(project 'xxx')has copy command from ‘xxx/xxx’ to ''xxx/xxx.app/COPYING'解决方案
  7. c语言中换行符与回车符的区别,C语言中换行符与回车符的区别
  8. 微信 图片二维码识别不了的问题
  9. leetcode报错:reference binding to misaligned address 0xbebebebebebec0ba for type ‘int‘, which requir 4
  10. 静态编译qemu_如何用QEMU运行x86 kernel