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

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

相关推荐
Boilermaker19921 天前
[Java 并发编程] Synchronized 锁升级
java·开发语言
沈浩(种子思维作者)1 天前
真的能精准医疗吗?癌症能提前发现吗?
人工智能·python·网络安全·健康医疗·量子计算
saoys1 天前
Opencv 学习笔记:图像掩膜操作(精准提取指定区域像素)
笔记·opencv·学习
MM_MS1 天前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
꧁Q༒ོγ꧂1 天前
LaTeX 语法入门指南
开发语言·latex
njsgcs1 天前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
alonewolf_991 天前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
io_T_T1 天前
迭代器 iteration、iter 与 多线程 concurrent 交叉实践(详细)
python
古城小栈1 天前
Rust 迭代器产出的引用层数——分水岭
开发语言·rust
华研前沿标杆游学1 天前
2026年走进洛阳格力工厂参观游学
python