二维码知识

在介绍二维码原理之前,先说下条形码 。条形码我们都见过,就是超市收银员结账的时候扫的那个东西。它是一种“一维码”,竖直方向,条码是均匀的,信息只能在水平方向上存储,并且只能由数字和字母组成。而二维码(现在常见的是QR Code,QR全称Quick Response)是一种比条形码更高级的条码格式,二维码在水平和垂直方向都能存储信息,并且二维码能存储汉字、数字和图片等信息,因此二维码的应用领域要广得多。

但是二维码是怎么生成的呢,我们知道,计算机只能识别0和1这两个数,所以要存储在二维码的信息,计算机会将这些字符都同一转变为0和1组成的二进制数字序列,这个转化的过程叫做编码。字符在变成只有0和1组成的数字序列后,在进行一系列优化算法后,就得到了最终的二进制编码。在最后这串编码中,一个0对应的就是一个白色小方块,一个1对应的就是一个黑色的小方块。我们把这些小方块按照8个一组,填进大方块里,这就是一个完整的,可以被手机相机识别的二维码图案了。

相比较于条形码,二维条码有一维条码没有的“定位点”和“容错机制”。不知大家有没有发现,所有的二维码都有三个小方块在边上。其实这三个方块是用来定位的,但为什么是三个呢,简单说就是三点确定一个面。如果只有一个点,经过这个点有无数个方框,两个点,有两个方框,因此就设了三个方块。所以不管你正着扫、倾斜扫、旋转180度扫,都能识别出来。”容错机制“就是在即使没有辨识到全部的条码、或是说条码有污损时,也可以正确地还原条码上的信息。

了解了二维码的知识,下面就用python实现二维码的生成和识别

二维码的生成
首先要先安装pillow,qrcode库,在dos窗口输入:

pip install pillow
pip install qrcode

代码如下:


import qrcode as qrcode #导入qrcode包# 二维码内容
data = "hello world"
# 生成二维码
img = qrcode.make(data=data)
# 直接显示二维码
img.show()
# 保存二维码为文件
img.save("hello.jpg")

运行后会出现一个二维码,并在文件的同目录下产生文件
下面代码设置二维码大小、颜色等参数来显示二维码

import qrcode as qrcode
qr = qrcode.QRCode(version=1, #二维码的格子矩阵大小error_correction=qrcode.constants.ERROR_CORRECT_Q,box_size=10,border=4,
)
qr.add_data("Hello World")#向二维码添加数据
qr.make(fit=True)
img = qr.make_image(fill_color="green", back_color="white")#更改QR的背景和绘画颜色
img.show()# 显示二维码

运行结果:
二维码一共有 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 的正方形。

具体的·一些参数详解可以看官方网址:
https://github.com/lincolnloop/python-qrcode#advanced-usage

二维码的识别
下面程序是预先给图片的识别

import cv2 as cv
from pyzbar import pyzbar as pyzbarimagepath = r"./timg.jpg" #图片路径
image = cv.imread(imagepath)
img = cv.cvtColor(image,cv.COLOR_BGR2GRAY)#转为灰度图片
barcodes = pyzbar.decode(img) #在图像中对二维码解码
for barcode in barcodes:barcodeData = barcode.data.decode("UTF8")barcodeType = barcode.type# 打印二维码数据和二维码类型print( barcodeData)print(barcodeType)

下面程序打开电脑摄像头检测二维码并读取二维码内容

import cv2 as cv
from pyzbar import pyzbar as pyzbardef decodeDisplay(image):barcodes = pyzbar.decode(image)for barcode in barcodes:# 提取二维码的边界框的位置# 画出图像中条形码的边界框(x, y, w, h) = barcode.rectcv.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)# 提取二维码数据为字节对象,所以如果我们想在输出图像上# 画出来,就需要先将它转换成字符串barcodeData = barcode.data.decode("UTF8")barcodeType = barcode.type# 绘出图像上条形码的数据和条形码类型text = "{} ({})".format(barcodeData, barcodeType)cv.putText(image, text, (x, y - 10), cv.FONT_HERSHEY_SIMPLEX,.5, (0, 0, 125), 2)# 向终端打印条形码数据和条形码类型print("[INFO] Found {} barcode: {}".format(barcodeType, barcodeData))return imagedef detect():camera = cv.VideoCapture(0)while True:# 读取当前帧ret, frame = camera.read()# 转为灰度图像gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)im = decodeDisplay(gray)c=cv.waitKey(5)#等待5毫秒cv.imshow("camera", im)if(c==27):#按下esc键关闭摄像头窗口camera.release()cv.destroyAllWindows()breakif __name__ == '__main__':detect()

python学习——二维码生成和识别相关推荐

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

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

  2. python 二维码生成与识别

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

  3. 【二维码识别】基于matlab GUI灰度+二值化+校正二维码生成与识别【含Matlab源码 635期】

    ⛄一.二维码生成与识别简介 如今,移动互联网技术日新月异,随着5G时代的来临,广泛应用于数据处理过程中的二维码信息安全日益成为人们越来越关注的问题.以QR码为代表的二维码,以其在信息存储.传输和识别技 ...

  4. 【二维码识别】灰度+二值化+校正二维码生成与识别【含GUI Matlab源码 635期】

    ⛄一.二维码生成与识别简介 如今,移动互联网技术日新月异,随着5G时代的来临,广泛应用于数据处理过程中的二维码信息安全日益成为人们越来越关注的问题.以QR码为代表的二维码,以其在信息存储.传输和识别技 ...

  5. 使用Python制作二维码生成软件

    使用Python制作二维码生成软件 需求背景: 在制造业工厂为了满足产品的追溯性要求,我们经常需要给零件做标记,内容包括:产品的料号,工单号,序号,原材料提供商等 传统的做法是制作固定格式的标签,使用 ...

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

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

  7. Android 二维码 生成和识别

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

  8. Android 二维码 生成和识别(附Demo源码)

    Posted on 2013-08-25 23:15 泡泡糖 阅读( 20424) 评论( 7) 编辑 收藏 今天讲一下目前移动领域很常用的技术--二维码.现在大街小巷.各大网站都有二维码的踪迹,不管 ...

  9. Python的妙用,PyQt5+qrcode,Python制作二维码生成工具

    前言: 今天我们就利用PyQt5+qrcode制作一个简单的二维码生成工具吧.让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: PyQt5模块: qrcode模块: 以及一些P ...

最新文章

  1. Java多线程两种实现方式的对比
  2. 「面试」美团肝了我30+问题
  3. win7 双屏 双工具栏_不知道这几个双屏操作技巧,你的显示器就白买了
  4. java管理系统代码bs_基于BS的人力资源管理系统 - WEB源码|JSP源码/Java|源代码 - 源码中国...
  5. Windows Mobile 获得 MAC,IP,IMEI,IMSI
  6. C++ 学习之旅三——我和超级玛丽有个约会
  7. JAVA这门语言 如何从刚毕业的小菜鸟进阶成月薪15K以上的工程师
  8. idea风格ui java_IDEA主题美化
  9. NOWAIT及SKIP LOCKED的使用
  10. 使用HTML编写浣溪沙,浣溪沙_巅峰Hacker_新浪博客
  11. python自动点击网页按钮_python网页自动化操作
  12. 10win重启计算机黑屏,win10启动后黑屏怎么回事_windows10开机启动黑屏如何解决
  13. python_爬取博客文章下载到本地
  14. spring integration sftp
  15. 如何下载网页中的视频(无需下载其他软件的方法,只需要一个浏览器)
  16. 小米 红米5A 解BL锁教程 申请BootLoader解锁教程
  17. 计算机网络教研活动讨论,创新教研活动形式, 开展网络教研。是提高教师有效...
  18. OpenCV Mat转dlib array2d
  19. 小程序 固定位置元素 遮挡其他元素_西门子S7-200 SMART切换编程编辑器、输入LAD程序、编辑程序...
  20. SlowFast复现

热门文章

  1. windows自带的远程控制 【实测成功】
  2. TensorFlow中 tf.space_to_depth()函数的用法
  3. 国民技术N32G430开发笔记(9)- IAP升级 Bootloader的制作
  4. 【js】js数据类型
  5. 梁宁《产品思维》之6集体人格
  6. 如何用代码判断iPad是否支持面容ID(iPad可以使用面容ID解锁但没有刘海)
  7. 360与瑞星近日上演“生死狙击”(完整版)
  8. photoshop备忘录(连载中)
  9. 树莓派基础实验7:倾斜开关实验
  10. 自建服务器搭建网盘,自建云盘系列——Plex (建立你的私人在线片库)