在标签中显示视频
show video in label
我目前正在从事一个项目,其中包括在图形用户界面中显示视频。
软件运行s在raspberry pi上,写在python。我正在为 gui 使用 tkinter。
当我 运行 播放视频功能时,只显示最后一帧。
一开始我以为覆盆子是慢的,但在插入睡眠(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
。
我目前正在从事一个项目,其中包括在图形用户界面中显示视频。 软件运行s在raspberry pi上,写在python。我正在为 gui 使用 tkinter。
当我 运行 播放视频功能时,只显示最后一帧。 一开始我以为覆盆子是慢的,但在插入睡眠(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
。