Python用opencv实现动态识别二维码,以及加强版Python GUI(图像用户界面编程)

 前言

        关于动态识别二维码信息,利用电脑摄像头动态扫描二维码,扫描视频中的二维码。


简易程序

import cv2  pip install opencv-python


def start():
    capture = cv2.VideoCapture(0)
    while True:

        fet, frame = capture.read()
        qrCodeDetector = cv2.QRCodeDetector()
        data, bbox, straight_qrcode = qrCodeDetector.detectAndDecode(frame)
        
        print(data) # data即读取到的数据

        cv2.namedWindow('read-QR', 0)
        cv2.imshow("read-QR", frame)
        k = cv2.waitKey(1)  # 保持画面的持续。
        if k == 27:  # 通过esc键退出摄像
            break

start()

加强版Python GUI(图像用户界面编程)

        由于我在项目中设计了一个PC端执行软件,所以用到了GUI编程,即图像用户界面编程,所以把关于这部分的GUI编程取了出来写在了下面。实际上用上面这个程序已经可以识别二维码了,下面这个程序是将程序由基于控制台来控制执行变成了图形用户界面来控制。将这个程序打包成软件可以用pip install auto-py-to-exe,这个库就是一个图像用户界面的程序,相比别的方式用起来比较友好,具体可以网上搜索学习。

import cv2
import tkinter
from tkinter import *
from PIL import Image, ImageTk
from tkinter import messagebox
import numpy as np

capture = cv2.VideoCapture(0)

root = tkinter.Tk()
root.title("read-QR")
root.geometry('900x600')
img_width = 800
img_height = 600 - 20
canvas = Canvas(root, bg='white', width=img_width, height=img_height)
canvas.place(x=0, y=0)


def on_closing():
    if messagebox.askokcancel("Quit", "Do you want to quit?"):
        root.destroy()
        capture.release()


def start():
    while True:

        fet, frame = capture.read()
        qrCodeDetector = cv2.QRCodeDetector()
        data, points, straight_qrcode = qrCodeDetector.detectAndDecode(frame)
        if data:
            cv2.drawContours(frame, [np.int32(points)], 0, (0, 255, 0), 2)  # 框出二维码位置

            print(data)

            tkinter.Label(root, text="姓名:" + data).place(x=900 - 100, y=0, width=100, height=20)

        tk_img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
        tk_img = Image.fromarray(tk_img)
        tk_img = tk_img.resize((img_width, img_height), Image.ANTIALIAS)
        tk_img = ImageTk.PhotoImage(image=tk_img)
        canvas.create_image(0, 0, anchor='nw', image=tk_img)
        root.update()
        root.after(1)


btnStart = tkinter.Button(root, text='开始', command=start)
btnStart.place(x=0, y=600 - 20, width=70, height=20)

root.protocol('WM_DELETE_WINDOW', on_closing)
root.mainloop()

关于如何制作二维码可看我同专栏的另一边篇文章,链接如下。

Python用qrcode和PIL制作二维码并添加汉字(用Python在图片上添加汉字)_"殇影的博客-CSDN博客python制作二维码,python批量制作二维码,python批量制作带汉字的二维码,在图片上添加汉字,用Python在图片上添加汉字https://blog.csdn.net/weixin_45694843/article/details/128046585?spm=1001.2014.3001.5502

你可能感兴趣的:(python学习笔记,Python,GUI编程(图像用户界面编程),python)