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

使用tkinter无递归方法显示opencv视频,opencv,tkinter,Opencv,Tkinter,我已经做了实时人脸检测系统,但我需要为程序添加gui。而不是使用来自的解决方案。我不想以递归的方式读取帧 def show_frame(): _,frame = cap.read() ... #skip lmain.after(10,show_frame) 在我以前的代码中,它需要大量重构。所以,我更喜欢以while循环的方式阅读框架。但它不起作用。谢谢你的帮助 import numpy as np import cv2 import tkinter as tk f

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

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() 

之后
不是递归,它只是将同一个函数安排在以后调度,结束后可能会对此有所了解,我建议也对该主题做一些后续研究。您现在的主要问题似乎是缺乏对GUI操作和编程基本原则的理解。这会导致您由于误解而放弃合法的解决方案,并试图将其强加给常规的命令行应用程序模型e、 g.
cv2.waitKey
不在这里,如果您想要键盘事件。