使用tkinter显示opencv视频而不使用递归方法

时间:2018-04-21 10:00:54

标签: opencv tkinter

我做过实时人脸检测系统,但我需要为程序添加gui。而不是使用here的解决方案。我不想以递归方式读取帧。

def show_frame():
    _,frame = cap.read()
    ...  #skip 
    lmain.after(10,show_frame)

在我以前的代码中需要进行大量的重构。所以,我更喜欢以while循环方式读取帧。但它不起作用。谢谢你的帮助。

import numpy as np
import cv2
import tkinter as tk
from PIL import Image, ImageTk

window = tk.Tk()
window.wm_title("Test")

imageFrame = tk.Frame(window, width=600, height=500)
imageFrame.grid(row=0, column=0, padx=10, pady=2)

#Capture video frames
lmain = tk.Label(imageFrame)
lmain.grid(row=0, column=0)
cap = cv2.VideoCapture(0)

def show_frame(frame):
    frame = cv2.flip(frame, 1)
    cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
    img = Image.fromarray(cv2image)
    imgtk = ImageTk.PhotoImage(image=img)
    lmain.imgtk = imgtk
    lmain.configure(image=imgtk)
    # lmain.after(10, show_frame) 

while True:
    _,frame = cap.read()
    show_frame(frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
window.mainloop() 

0 个答案:

没有答案