轻松测试二维码生成与识别:使用Python的qrcode、opencv和pyzbar库

二维码生成与识别测试方法

安装必要的Python库

在开始之前,确保已安装以下库:

  • qrcode:用于生成二维码
  • opencv-python:用于图像处理和摄像头捕获
  • pyzbar:用于解码二维码
bash 复制代码
pip install qrcode opencv-python pyzbar
生成二维码

使用qrcode库可以快速生成二维码图片。以下代码生成一个包含指定文本的二维码并保存为qrcode.png

python 复制代码
import qrcode

data = "https://example.com"  # 替换为需要编码的内容
qr = qrcode.QRCode(version=1, box_size=10, border=5)
qr.add_data(data)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save("qrcode.png")
从图片文件识别二维码

使用pyzbaropencv可以解码二维码图片:

python 复制代码
import cv2
from pyzbar.pyzbar import decode

image = cv2.imread("qrcode.png")
decoded_objects = decode(image)
for obj in decoded_objects:
    print("Data:", obj.data.decode("utf-8"))
实时摄像头识别二维码

通过摄像头实时捕获并识别二维码:

python 复制代码
cap = cv2.VideoCapture(0)
while True:
    _, frame = cap.read()
    decoded_objects = decode(frame)
    for obj in decoded_objects:
        print("Data:", obj.data.decode("utf-8"))
        # 在图像上绘制二维码边界
        points = obj.polygon
        if len(points) > 4:
            hull = cv2.convexHull(np.array([point for point in points], dtype=np.float32))
            cv2.polylines(frame, [hull], True, (0, 255, 0), 2)
        else:
            cv2.polylines(frame, [np.array(points)], True, (0, 255, 0), 2)
    
    cv2.imshow("QR Code Scanner", frame)
    if cv2.waitKey(1) == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()
自定义二维码参数

qrcode库支持多种自定义参数:

  • version:控制二维码大小(1-40)
  • error_correction:设置纠错级别(qrcode.constants.ERROR_CORRECT_L等)
  • box_size:每个模块的像素数
  • border:边框的模块数
python 复制代码
qr = qrcode.QRCode(
    version=2,
    error_correction=qrcode.constants.ERROR_CORRECT_H,
    box_size=8,
    border=4,
)
处理识别中的常见问题
  • 图像模糊时,尝试调整摄像头焦距或使用cv2.GaussianBlur预处理
  • 低光照条件下,使用cv2.equalizeHist增强对比度
  • 对于小二维码,使用cv2.resize放大图像
python 复制代码
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
_, threshold = cv2.threshold(blurred, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

欢迎点赞评论,指出不足,笔者由衷感谢!~

相关推荐
吴佳浩7 分钟前
Python入门指南(六) - 搭建你的第一个YOLO检测API
人工智能·后端·python
长安第一美人43 分钟前
C 语言可变参数(...)实战:从 logger_print 到通用日志函数
c语言·开发语言·嵌入式硬件·日志·工业应用开发
Larry_Yanan1 小时前
Qt多进程(一)进程间通信概括
开发语言·c++·qt·学习
superman超哥1 小时前
仓颉语言中基本数据类型的深度剖析与工程实践
c语言·开发语言·python·算法·仓颉
不爱吃糖的程序媛1 小时前
Ascend C开发工具包(asc-devkit)技术解读
c语言·开发语言
bu_shuo1 小时前
MATLAB奔溃记录
开发语言·matlab
Learner__Q2 小时前
每天五分钟:滑动窗口-LeetCode高频题解析_day3
python·算法·leetcode
————A2 小时前
强化学习----->轨迹、回报、折扣因子和回合
人工智能·python
你的冰西瓜2 小时前
C++标准模板库(STL)全面解析
开发语言·c++·stl
徐先生 @_@|||2 小时前
(Wheel 格式) Python 的标准分发格式的生成规则规范
开发语言·python