OpenCV项目实战:条形码和二维码检测

此功能

需要导入三个库 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)


在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值