【问题标题】:show video in label在标签中显示视频
【发布时间】:2015-07-15 14:46:04
【问题描述】:

我目前正在从事一个项目,其中包括在 gui 中显示视频。 该软件在树莓派上运行,并用 python 编写。我正在为 gui 使用 tkinter。

当我运行 playvideo 功能时,只显示最后一帧。 首先我认为覆盆子会变慢,但在插入 sleep(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()

非常感谢!!!

【问题讨论】:

  • 你最可能需要的是:在某处覆盖paint方法。现在发生的事情是,有一个线程正在绘制 UI。但是, play_video() 占用了整个线程 - 因此您最终只得到最后一帧。

标签: python opencv tkinter raspberry-pi


【解决方案1】:

您不能在 UI 应用程序中使用这样的 while 循环,因为它会阻止处理系统事件。您必须保持mainloop 处理事件才能继续处于活动状态。

在这种情况下,您应该创建一个捕获并显示单个帧的函数,然后在“start_video”函数中,使用after 方法来安排调用以捕获帧,并且每次捕获帧时使用@987654323再次@ 以安排下一次捕获。如果您保留 after 调用返回的令牌,stop_video 方法可以取消最后一个 after

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 2011-07-06
    • 1970-01-01
    相关资源
    最近更新 更多