基于Opencv读取静态QR码信息并进行窗口展示

使用python的opencv库制作一个二维码扫描器,它通过摄像头捕获实时视频流并解码二维码。当扫描到二维码时,会通过 tkinter 创建一个窗口显示二维码的数据。

源码在我的资源,已封装好函数

1. 引入所需库

import cv2
import numpy as np
from pyzbar.pyzbar import decode
import tkinter as tk
  • cv2: OpenCV库,用于视频捕捉和图像处理。
  • numpy: 用于处理数组数据,特别是在图像处理时经常使用。
  • pyzbar.pyzbar.decode: 用于解码二维码。pyzbar 是一个处理二维码(QR Code)和条形码的库。
  • tkinter: 用于创建图形用户界面(GUI),这里用来展示二维码的数据。

2. 遍历解码出来的二维码

for obj in decoded_objects:
# 获取二维码的边框坐标
    points = obj.polygon

对每个解码出来的二维码(decoded_objects 中的每个 obj),获取其四个边角的坐标 polygon

if len(points) == 4:
    points = [(point.x, point.y) for point in points]
else:
# 如果二维码不是矩形,进行近似处理
    points = [(point.x, point.y) for point in obj.rect]

如果二维码的边是矩形,则直接使用这些点,否则使用 obj.rect 进行近似处理。

points = cv2.convexHull(np.array(points, dtype=np.int32))
cv2.polylines(frame, [points], True, (0, 0, 255), 2)

使用 cv2.convexHull() 将边界点构成一个凸包,确保即使二维码形状不规则也能正确包围起来。然后用 cv2.polylines() 绘制二维码的边框,颜色为红色 (0, 0, 255),线条宽度为 2。

3. 提取二维码的数据

qr_data = obj.data.decode("utf-8")

提取二维码中的数据并解码为 UTF-8 字符串。

4.创建窗口显示信息

window = tk.Tk()
    window.title("QR Code data")
    label = tk.Label(window, text=f"{qr_data}", font=("Arial", 50))
    label.pack(pady=10)  

    window.mainloop()

使用 tkinter 创建一个简单的 GUI 窗口显示二维码的数据。窗口中使用 Label 组件显示二维码的内容,字体大小为 50 像素,窗口的主事件循环通过 window.mainloop() 启动

示例效果

基于Opencv读取静态QR码信息并进行窗口展示_第1张图片

你可能感兴趣的:(opencv,人工智能,计算机视觉)