我目前正在做一个项目,其中包括在gui中显示视频。该软件运行在树莓派上,用python编写。我正在使用tkinter作为gui。
当我运行playvideo函数时,只显示最后一帧。一开始我以为覆盆子是要慢,但也插了个睡(3)后什么都没变。
有人看到我的错误吗?
def play_video():
cap = cv2.VideoCapture('video.h264')
ret = True
while(ret):
ret, frame = cap.read()
time.sleep(3)
if ret:
print "in"
img = Image.fromarray(frame)
imgtk = ImageTk.PhotoImage(image=img)
show_video_label .imgtk = imgtk
show_video_label .configure(image=imgtk)
show_video_label._image_cache = imgtk
cap.release()
非常感谢!
您不能在UI应用程序中使用这样的while循环,因为它会阻止处理系统事件。您必须保持mainloop
处理事件继续处于活动状态。
在这种情况下,你应该创建一个函数来捕获和显示单个帧,然后在'start_video'函数中,使用after
方法来调度捕获帧的调用,每次捕获帧时再次使用after
来调度下一次捕获。如果您保留after
调用返回的令牌,则stop_video
方法可以取消最后一个after
。