轻松测试二维码生成与识别:使用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)

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

相关推荐
陈增林16 小时前
基于 PyQt5 的多算法视频关键帧提取工具
开发语言·qt·算法
郝学胜-神的一滴17 小时前
Linux系统函数stat和lstat详解
linux·运维·服务器·开发语言·c++·程序人生·软件工程
编程岁月17 小时前
java面试-0141-java反射?优缺点?场景?原理?Class.forName和ClassLoader区别?
java·开发语言·面试
、花无将17 小时前
PHP:配置问题从而导致代码运行出现错误
开发语言·php
小小测试开发17 小时前
pytest 库用法示例:Python 测试框架的高效实践
开发语言·python·pytest
BUG弄潮儿17 小时前
go-swagger标准接口暴露
开发语言·后端·golang
至善迎风17 小时前
把 Python 应用打包成 Mac 应用程序 — 完整指南
python·macos
数字化顾问17 小时前
Flink ProcessFunction 与低层级 Join 实战手册:实时画像秒级更新系统
java·开发语言
qq_3391911418 小时前
go win安装grpc-gen-go插件
开发语言·后端·golang