Я делаю приложение tkinter для редактирования видео с веб-камеры.
Я хочу сделать два окна. Один для кнопок и исходного видео, а другой для отредактированного видео.
import tkinter as tk
import cv2
import PIL.Image, PIL.ImageTk
import time
class MainWindow(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
self.canvas = tk.Canvas(self, width=720, height=480)
self.canvas.pack()
self.vid = cv2.VideoCapture(0)
self.btn_snapshot = tk.Button(self, text="Take photo", width=20, command=self.snapshot)
self.btn_snapshot.pack(anchor=tk.CENTER, expand=True)
self.Slider_1 = tk.Scale(self, length=300.0, from_=0, to=200, orient=tk.HORIZONTAL)
self.Slider_1.pack()
self.button = tk.Button(self, text="Create new window",
command=self.create_window)
self.button.pack(side="top")
self.show_frame()
def show_frame(self):
_, frame = self.vid.read()
frame = cv2.flip(frame, 1)
cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
self.photo = PIL.ImageTk.PhotoImage(image=PIL.Image.fromarray(cv2image))
self.canvas.create_image(0, 0, image=self.photo, anchor=tk.NW)
tk.Label(root).after(10, self.show_frame)
def create_window(self):
tl = tk.Toplevel(self)
tl.wm_title("Window new")
l = tk.Label(tl, text="This is window")
l.focus_force()
l.pack(side="top", fill="both", expand=True, padx=100, pady=100)
def snapshot(self):
pass
ret, frame = self.vid.get_frame() #will be soon
if ret:
cv2.imwrite("frame-" + time.strftime("%d-%m-%Y-%H-%M-%S") + ".jpg", cv2.cvtColor(frame, cv2.COLOR_RGB2BGR))
if __name__ == "__main__":
root = tk.Tk()
main = MainWindow(root)
main.pack(side="top", fill="both", expand=True)
root.mainloop()
В качестве первого шага я просто хочу, чтобы функция "create_window" показывала мне видео с веб-камеры. Но если я просто скопирую код функции "show_frame" и вставлю его, он не будет работать надлежащим образом.
Итак, вопрос в том, как добавить видео с веб-камеры в функцию «create_window»?