用Python和OpenCV搭建自己的一维码和QRCode扫描仪(步骤 + 源码)

导 读

本文主要介绍使用Python和OpenCV搭建自己的一维码和QRCode扫描仪(步骤 + 源码)。

项目简介

本文我们将创建一个程序来扫描图像中的二维码和条形码。对于这个程序,我们需要三个包,分别是OpenCV、NumPy和pyzbar。大多数 Python 程序员都熟悉 OpenCV 和 Numpy 库。OpenCV 是一个开源计算机视觉和机器学习库。它是一个有用的图像处理库。我们在项目中使用这个库来处理设备捕获的视频中的每一帧。我们在这里使用 Numpy,因为 pyzbar 可与 OpenCV / numpy ndarrays 配合使用。而 pyzbar 库用于从给定图像中读取条形码和 QR 码。它支持 EAN-13/UPC-A、UPC-E、EAN-8、Code 128、Code 39、Interleaved 2 of 5 和 QR 码。这是对我们的项目和库的简短介绍,下面将详细介绍实现步骤。

实现步骤

**【1】安装需要的库。**主要有OpenCV, Numpy, PyZbar。

复制代码
#安装OpenCVpip install opencv-python​​​​​​

#安装pyzbarpip install pyzbar​​​​​​​

#安装numpypip install numpy

**【2】导入所有需要的库。**代码如下:​​​​​​​

复制代码
import cv2import numpy as npfrom pyzbar.pyzbar import decode

**【3】从摄像头设备捕获视频。**代码如下:​​​​​​​

复制代码
cap = cv2.VideoCapture(0)while True:    ret, frame = cap.read()    cv2.imshow('image', frame)    code = cv2.waitKey(10)    if code == ord('q'):        break

**【4】创建解码器函数,用于解码给定图像中的条形码和QRCode。**代码如下:​​​​​​​

复制代码
def decoder(image):    gray_img = cv2.cvtColor(image,0)    barcode = decode(gray_img)
    for obj in barcode:        points = obj.polygon        (x,y,w,h) = obj.rect        pts = np.array(points, np.int32)        pts = pts.reshape((-1, 1, 2))        cv2.polylines(image, [pts], True, (0, 255, 0), 3)
        barcodeData = obj.data.decode("utf-8")        barcodeType = obj.type        string = "Data: " + str(barcodeData) + " | Type: " + str(barcodeType)                cv2.putText(frame, string, (x,y), cv2.FONT_HERSHEY_SIMPLEX,0.8,(0,0,255), 2)        print("Barcode: "+barcodeData +" | Type: "+barcodeType)

该函数获取图像,然后从图像中识别 QR 码和条形码,并对其值进行解码。这里的条形码是由解码函数识别的条形码和QRcode对象的列表。每个对象包含矩形、多边形、数据、类型等属性。矩形和多边形属性给出了条形码和QR码的位置。

完整代码和检测效果:​​​​​​​

复制代码
import cv2import numpy as npfrom pyzbar.pyzbar import decode
def decoder(image):    gray_img = cv2.cvtColor(image,0)    barcode = decode(gray_img)
    for obj in barcode:        points = obj.polygon        (x,y,w,h) = obj.rect        pts = np.array(points, np.int32)        pts = pts.reshape((-1, 1, 2))        cv2.polylines(image, [pts], True, (0, 255, 0), 3)
        barcodeData = obj.data.decode("utf-8")        barcodeType = obj.type        string = "Data " + str(barcodeData) + " | Type " + str(barcodeType)                cv2.putText(frame, string, (x,y), cv2.FONT_HERSHEY_SIMPLEX,0.8,(255,0,0), 2)        print("Barcode: "+barcodeData +" | Type: "+barcodeType)
cap = cv2.VideoCapture(0)while True:    ret, frame = cap.read()    decoder(frame)    cv2.imshow('Image', frame)    code = cv2.waitKey(10)    if code == ord('q'):        break
相关推荐
取经蜗牛33 分钟前
Python 第一阶段完全指南:从零到第一个实用工具
开发语言·python
创世宇图38 分钟前
【Python工程化实战】OpenTelemetry 在 Python 中的全链路追踪落地:从埋点到可视化的完整实战指南
python·分布式链路追踪·性能监控·opentelemetry·微服务可观测性
许彰午2 小时前
72_Python爬虫基础BeautifulSoup
爬虫·python·beautifulsoup
zhanghongyi_cpp2 小时前
10. 实验书3.4.2 筛选达到预警阈值的病虫害数据
python
tuddy7894643 小时前
Codex++ 安全边界探秘:从模型能力到风险防御
人工智能·python·安全
C++、Java和Python的菜鸟3 小时前
第1章 集合高级
java·jvm·python
第六五3 小时前
Python 内置装饰器
开发语言·python
梦帮科技3 小时前
UE5 GAS 实战:用 Gameplay Ability System 搭建「赛博修真」境界与技能体系
c++·人工智能·python·ue5·c#
码来的小朋友4 小时前
手把手教你用 Python + PyQt5 做一个可视化图片切图工具
开发语言·python·microsoft
weixin199701080164 小时前
[特殊字符]《京东订单API(jd.order.detail.get)对接ERP:企业认证+OAuth授权避坑指南》(附Python源码)
java·数据库·python