轻松测试二维码生成与识别:使用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]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地
开发语言·python
Java陈序员7 小时前
轻量运维面板!一款现代化的服务器控制面板工具!
运维·服务器·python·react.js·github
2601_962097367 小时前
1. 使用 C 或 C++ 扩展 Python
python·api·c·引用计数·扩展模块
Yanjun2i8 小时前
Agent学习记录五:Pydantic验证
人工智能·python·学习
繁星蓝雨8 小时前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进
Evand J8 小时前
【MATLAB例程,图像降噪滤波9】自适应维纳滑动窗口滤波(Wiener)图像降噪、方法对比,有中文注释
开发语言·图像处理·计算机视觉·matlab·滑动窗口·滤波·降噪
月光船幽幽8 小时前
跨范式映射的稳定接口设计
人工智能·python·算法
杜大哥8 小时前
python程序:如何查看电脑【电池电量的剩余百分比】 和 【是否插入连接着充电器】?
开发语言·python
wuyk5558 小时前
Python网络爬虫入门到实战 第01章:爬虫到底是什么?原理、流程、合法性、风险全解析(零基础必看)
开发语言·爬虫·python