【发布时间】:2014-09-28 17:57:57
【问题描述】:
我正在开发一项心理学实验,用于分析用户在完成行为任务时的面部表情。该应用程序主要通过 Tkinter 运行,我正在使用 openCV 来捕获视频。
在最小的情况下,我需要根据用户的反应开始和停止录制。例如,在下面的代码中,我希望用户使用鼠标按下按钮来指定何时开始和停止录制视频。
import Tkinter as tk
import cv2
# -------begin capturing and saving video
def startrecording():
cap = cv2.VideoCapture(0)
fourcc = cv2.cv.CV_FOURCC(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
out.write(frame)
else:
break
# -------end video capture and stop tk
def stoprecording():
cap.release()
out.release()
cv2.destroyAllWindows()
root.quit()
root.destroy()
# -------configure window
root = tk.Tk()
root.geometry("%dx%d+0+0" % (100, 100))
startbutton=tk.Button(root,width=10,height=1,text='START',command = startrecording)
stopbutton=tk.Button(root,width=10,height=1,text='STOP', command = stoprecording)
startbutton.pack()
stopbutton.pack()
# -------begin
root.mainloop()
问题在于 OpenCV 使用循环来录制视频,在此期间 Tkinter 无法监听用户响应。程序卡在 OpenCV 循环中,用户无法继续。 我怎样才能同时录制视频和听取用户的反应?
我研究过并行处理(例如,Display an OpenCV video in tkinter using multiprocessing),但这听起来比看起来需要的更大。
我也研究过使用 root.after 命令(例如,Show webcam sequence TkInter),但使用它似乎只能捕获一个帧,而我想要一个视频。
还有其他方法吗?我需要使用两个处理流吗?
【问题讨论】:
标签: python opencv video tkinter