二维码识别简陋界面python opencv
该代码使用了opencv与tkinter
可以通过recongnize调用本机的摄像头进行识别,也可以通过recongnize2按钮进行输入本机路径来识别二维码,
返回值出现在终端
# -*- coding:utf-8 –*-
import cv2
import pyzbar.pyzbar as pyzbar
import numpy as np
from cv2 import cv2
import pyzbar.pyzbar as pyzbar
import tkinter.font as tkFont
from tkinter import *
def decodeDisplay(video):
# 转为灰度图像
gray = cv2.cvtColor(video, cv2.COLOR_BGR2GRAY)
barcodes = pyzbar.decode(gray)
for barcode in barcodes:
# 提取二维码的位置,然后用边框标识出来在视频中
(x, y, w, h) = barcode.rect
cv2.rectangle(video, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 字符串转换
barcodeData = barcode.data.decode("utf-8")
barcodeType = barcode.type
# 在图像上面显示识别出来的内容
text = "{}".format(barcodeData)
cv2.putText(video, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX,1, (0, 255, 0), 2)
# 打印识别后的内容
print("[扫描结果] 二维码类别: {0} 内容: {1}".format(barcodeType, barcodeData))
cv2.imshow("cam", video)
def detect():
cv2.namedWindow("cam",cv2.WINDOW_NORMAL)
cam = cv2.VideoCapture(0)
while True:
# 读取当前帧
ret, frame = cam.read()
decodeDisplay(frame)
# 按ESC键退出
if(cv2.waitKey(5)==27):
break
cam.release()
cv2.destroyAllWindows()
def decodeDisplay2(path):
# 转为灰度图像
gray = cv2.cvtColor(path, cv2.COLOR_BGR2GRAY)
barcodes = pyzbar.decode(gray)
for barcode in barcodes:
# 提取二维码的位置,然后用边框标识出来在视频中
(x, y, w, h) = barcode.rect
cv2.rectangle(path, (x, y), (x + w, y + h), (0, 255, 0), 2)
# 字符串转换
barcodeData = barcode.data.decode("utf-8")
barcodeType = barcode.type
# 在图像上面显示识别出来的内容
text = "{}".format(barcodeData)
cv2.putText(path, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX,1, (0, 255, 0), 2)
# 打印识别后的内容
print("[扫描结果] 二维码类别: {0} 内容: {1}".format(barcodeType, barcodeData))
def detect2(path):
# 读取当前帧
frame = cv2.imread(path)
decodeDisplay2(frame)
# 按ESC键退出
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == '__main__':
root=Tk()
root['width']=720
root['height']=600
labels=[]
root.geometry('460x240')
root.title('摄像头二维码识别')
ft1 = tkFont.Font(size=20, slant=tkFont.ITALIC)
lb1 = Label(root, text='picture recongnize',bg='yellow',font = ('黑体',30))
lb1.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.4)
btn2 = Button(root, text='recongnize', command=lambda:detect(),bg='blue',font = ('黑体',18))
btn2.place(relx=0.35, rely=0.6, relwidth=0.3, relheight=0.2)
inp2 = Entry(root)
inp2.place(relx=0.35, rely=0.5, relwidth=0.3, relheight=0.1)
btn1 = Button(root, text='recongnize2', command=lambda:detect2(inp2.get()),bg='blue',font = ('黑体',18))
btn1.place(relx=0.35, rely=0.8, relwidth=0.3, relheight=0.2)
root.mainloop()