使用多处理在tkinter中显示OpenCV视频

我目前正在尝试为

。下面的代码确实成功执行了此操作,因为它显示了视频供稿和一个“退出”按钮,但是运行方式很奇怪: *

  • 该程序 ,表示程序“要求运行时以异常方式终止”pythonw.exe*quit button``'X'

关于如何解决该问题的任何想法将不胜感激!

我的代码:

#!/usr/bin/python

import numpy as np

from multiprocessing import Process, Queue

from Queue import Empty

import cv2

import cv2.cv as cv

from PIL import Image, ImageTk

import time

import Tkinter as tk

#tkinter GUI functions----------------------------------------------------------

def quit_(root, process):

process.join()

root.destroy()

def update_image(image_label, queue):

frame = queue.get()

im = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

a = Image.fromarray(im)

b = ImageTk.PhotoImage(image=a)

image_label.configure(image=b)

image_label._image_cache = b # avoid garbage collection

root.update()

def update_all(root, image_label, queue):

update_image(image_label, queue)

root.after(0, func=lambda: update_all(root, image_label, queue))

#multiprocessing image processing functions-------------------------------------

def image_capture(queue):

vidFile = cv2.VideoCapture(0)

while True:

try:

flag, frame=vidFile.read()

if flag==0:

break

queue.put(frame)

cv2.waitKey(20)

except:

continue

if __name__ == '__main__':

queue = Queue()

print 'queue initialized...'

root = tk.Tk()

print 'GUI initialized...'

image_label = tk.Label(master=root)# label for the video frame

image_label.pack()

print 'GUI image label initialized...'

p = Process(target=image_capture, args=(queue,))

p.start()

print 'image capture process has started...'

# quit button

quit_button = tk.Button(master=root, text='Quit',command=lambda: quit_(root,p))

quit_button.pack()

print 'quit button initialized...'

# setup the update callback

root.after(0, func=lambda: update_all(root, image_label, queue))

print 'root.after was called...'

root.mainloop()

print 'mainloop exit'

p.join()

print 'image capture process exit'

  • 配置:Windows 7 Home,Python 2.7.5,OpenCV 2.4

回答:

我通过在函数中使用process.terminate()代替来解决它。process.join()``quit_(root, process)

以上是 使用多处理在tkinter中显示OpenCV视频 的全部内容, 来源链接: utcz.com/qa/418783.html

回到顶部