【问题标题】:GUI interface to preview opencv changes用于预览 opencv 更改的 GUI 界面
【发布时间】:2020-04-28 18:39:50
【问题描述】:

我是 python 新手,我正在尝试学习 openCV,所以为了查看和分析视频上的帧,我想使用 tkinter 制作一个简单的 GUI 界面来控制视频的基本控制,例如播放、暂停分步循环,我在下面的代码中的问题是当我点击播放时,一切都被进程阻止了,我不再能够点击暂停或任何按钮,请任何关于如何实现它来运行它的建议异步。

from tkinter import *
import cv2

def play():
  cap = cv2.VideoCapture('480.m4v')

  while cap.isOpened():
    ret, frame1 = cap.read()
    cv2.imshow("feed", frame1)

    if cv2.waitKey(33) == 27:
        break

  cv2.destroyAllWindows()
  cap.release()


def pause():
  print(var1.get())


def step():
  print(var1.get())

root = Tk()
root.title('GUI Control')
root.geometry('700x400')

# Play Button
play_btn = Button(root, text="Play", width=12, command=play)
play_btn.grid(row=0, column=0, padx=20, pady=20)
# Pause Button
pause_btn = Button(root, text="Pause", width=12, command=pause)
pause_btn.grid(row=0, column=1, pady=20, padx=20)
# Step Button
pause_btn = Button(root, text="Step", width=12, command=step)
pause_btn.grid(row=0, column=2, padx=20, pady=20)

var1 = IntVar()
Checkbutton(root, text="Loop Playing", variable=var1).grid(
    row=1, column=0, sticky=W, padx=20)


root.mainloop()

【问题讨论】:

    标签: python-3.x opencv asynchronous tkinter


    【解决方案1】:

    如果这是最好的方法,我不是,但我使用了线程,它按预期工作,这里是代码:

    from tkinter import *
    import cv2
    import threading
    
    def vid():
        loop = 1
        while loop == 1:
            cap = cv2.VideoCapture('480.m4v')
    
            while cap.isOpened():
                ret, frame1 = cap.read()
                if ret == False:
                    break
                cv2.imshow("feed", frame1)
    
                if cv2.waitKey(33) == 27:
                    break
    
            loop = var1.get()
    
        cv2.destroyAllWindows()
        cap.release()
    
    def playFunc():
        t1 = threading.Thread(target=vid)
        t1.start()
    
    def pauseFunc():
        print(var1.get())
    
    def stepFunc():
        print(var1.get())
    
    root = Tk()
    root.title('GUI Control')
    root.geometry('700x400')
    
    # Play Button
    play_btn = Button(root, text="Play", width=12, command=playFunc)
    play_btn.grid(row=0, column=0, padx=20, pady=20)
    # Pause Button
    pause_btn = Button(root, text="Pause", width=12, command=pauseFunc)
    pause_btn.grid(row=0, column=1, pady=20, padx=20)
    # Step Button
    pause_btn = Button(root, text="Step", width=12, command=stepFunc)
    pause_btn.grid(row=0, column=2, padx=20, pady=20)
    
    var1 = IntVar()
    Checkbutton(root, text="Loop Playing", variable=var1).grid(
        row=1, column=0, sticky=W, padx=20)
    
    root.mainloop()
    

    【讨论】:

      猜你喜欢
      • 2023-02-03
      • 2020-08-28
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 2015-01-03
      相关资源
      最近更新 更多