此功能
需要导入三个库 opencv-python、numpy、pyzbar
获取二维码所包含的信息
import cv2
import numpy as np
from pyzbar.pyzbar import decode
img=cv2.imread("E:/graduatedata/code/OpencvPython/Resources/Qr.png")
# 将图片发送至解码器
code=decode(img)
# 查看有什么信息
print(code)
# 当图片中不止一个二维码时 循环获取
for barcode in decode(img):
print(barcode.data)
myData=barcode.data.decode("utf-8")
print(myData)
通过摄像头检测二维码
当摄像头扫描到的图像
是二维码时对二维码进行处理
是条形码时对条形码进行处理
import cv2
import numpy as np
from pyzbar.pyzbar import decode
# 通过摄像头获得图像
cap= cv2.VideoCapture(0)
cap.set(3,640)
cap.set(4,480)
while True:
sucess,img=cap.read()
# 当图片中不止一个二维码时 循环获取
for barcode in decode(img):
# 获取二维码的数据信息
print(barcode.data)
# 将二维码内容转成字符串
myData=barcode.data.decode("utf-8")
print(myData)
# 在二维码周围添加矩形边界框 先将矩形框信息转换成数组 重塑数组形状 图像发生旋转时可以正常显示矩形框
pts=np.array([barcode.polygon],np.int32)
pts=pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(2555,0,255),5)
# 使用条形码的点 作为文本的放置点 当二维码转动时 文本不发生转动 便于阅读
pts2=barcode.rect
cv2.putText(img,myData,(pts2[0],pts2[1]),cv2.FONT_HERSHEY_SIMPLEX,0.9,(255,0,255),2)
cv2.imshow("Result",img)
cv2.waitKey(1)
用于身份验证程序的代码
背景描述:我们拥有一个ID列表,只要有人进来,就会显示其身份ID, 系统会检查他们的ID是否被授权
创建一个text文件,其中包含所有被授权人的ID,自己手动输入随机值即可,然后判断每个二维码中包含的内容是否已被包含在已授权的ID列表
import cv2
import numpy as np
from pyzbar.pyzbar import decode
# 通过摄像头获得图像
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
#读取text文件中的数据 并将其添加至列表 文件中的每一行是列表中的一项
with open("myDataFile") as f:
myDataList=f.read().splitlines()
print(myDataList)
# 检查此人是否被授权
while True:
sucess, img = cap.read()
# 当图片中不止一个二维码时 循环获取
for barcode in decode(img):
print(barcode.data)
# 将二维码内容转成字符串
myData = barcode.data.decode("utf-8")
print(myData)
#判断二维码中数据是否在已授权的ID列表
if myData in myDataList:
print("Authorized")
else:
print("Un-Authorized")
# 在二维码周围添加矩形边界框 先将矩形框信息转换成数组 重塑数组形状 图像发生旋转时可以正常显示矩形框
pts = np.array([barcode.polygon], np.int32)
pts = pts.reshape((-1, 1, 2))
cv2.polylines(img, [pts], True, (2555, 0, 255), 5)
# 使用条形码的点 作为文本的放置点 当二维码转动时 文本不发生转动 便于阅读
pts2 = barcode.rect
cv2.putText(img, myData, (pts2[0], pts2[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (255, 0, 255), 2)
cv2.imshow("Result", img)
cv2.waitKey(1)
改进:将是否授权的信息从控制台打印输出改为在二维码上方显示
import cv2
import numpy as np
from pyzbar.pyzbar import decode
# 通过摄像头获得图像
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
#读取text文件中的数据 并将其添加至列表 文件中的每一行是列表中的一项
with open("myDataFile") as f:
myDataList=f.read().splitlines()
print(myDataList)
# 检查此人是否被授权
while True:
sucess, img = cap.read()
# 当图片中不止一个二维码时 循环获取
for barcode in decode(img):
print(barcode.data)
# 将二维码内容转成字符串
myData = barcode.data.decode("utf-8")
print(myData)
# 判断二维码中数据是否在已授权的ID列表 并设置不同显示颜色
if myData in myDataList:
myOutput="Authorized"
myColor=(0,255,0)
else:
myOutput ="Un-Authorized"
myColor = (0, 0, 255)
# 在二维码周围添加矩形边界框 先将矩形框信息转换成数组 重塑数组形状 图像发生旋转时可以正常显示矩形框
pts = np.array([barcode.polygon], np.int32)
pts = pts.reshape((-1, 1, 2))
cv2.polylines(img, [pts], True, myColor, 5)
# 使用条形码的点 作为文本的放置点 当二维码转动时 文本不发生转动 便于阅读
pts2 = barcode.rect
cv2.putText(img, myOutput, (pts2[0], pts2[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.9, myColor, 2)
cv2.imshow("Result", img)
cv2.waitKey(1)