Дали задание научится работать с видео в Python . Нужно запускать видео с камеры или с компьютера и проводить над ним разные геометрические или цветовые преобразования в режиме реального времени . Такие как вертикальный сдвиг , цвет видео должен становится серым , sobel и фильтр преобразования в рельефное .
То есть пользователь запустил видео или свою веб камеру и мог нажимать кнопки и изображение менялось . Проблема в том что я не могу сделать изменение видео в режиме реального времени . Код который готов на данный момент прикрепил
То есть пользователь запустил видео или свою веб камеру и мог нажимать кнопки и изображение менялось . Проблема в том что я не могу сделать изменение видео в режиме реального времени . Код который готов на данный момент прикрепил
Python:
from tkinter import *
import cv2 as cv
import numpy as np
from tkinter.filedialog import askopenfile
from tkinter import messagebox
import PIL.Image, PIL.ImageTk
import time
class Application(Frame):
def __init__(self, root):
super(Application, self).__init__(root)
self.root = root
self.widgets()
self.delay = 15
self.canwidth = 850
self.canhight = 450
def widgets(self):
#----------transformations----------
self.btn1 = Button(text = 'Gray',fg = 'white',bg = 'black',padx = '20',pady = '10')
self.btn1.place(x = '50',y = '50')
self.btn2 = Button(text = 'Sobel',fg = 'white',bg = 'black',padx = '20',pady = '10')
self.btn2.place(x = '50',y = '120')
self.btn3 = Button(text = 'Сдвиг',fg = 'white',bg = 'black',padx = '20',pady = '10')
self.btn3.place(x = '50',y = '190')
self.btn4 = Button(text = 'Рельеф',fg = 'white',bg = 'black',padx = '20',pady = '10')
self.btn4.place(x = '50',y = '260')
#----------VIDEO-------------
self.btn5 = Button(text = 'Файл',fg = 'white',bg = 'black',padx = '20',pady = '10', command = self.video)
self.btn5.place(x = '50',y = '480')
self.btn6 = Button(text = 'Камера',fg = 'white',bg = 'black',padx = '20',pady = '10', command = self.start_webcam )
self.btn6.place(x = '150',y = '480')
#------------Canvas---------------
self.canvas = Canvas(root, width = 850 ,height = 450,bg = 'blue')
self.canvas.place(x ='200',y = '1')
def start_video(self):
self.ret,self.frame = self.vid.read()
if self.ret:
self.frame = cv.cvtColor(self.frame, cv.COLOR_BGR2RGB)
self.frame = cv.flip(self.frame,1)
self.frame = cv.resize(self.frame,(self.canwidth,self.canhight))
self.photo = PIL.ImageTk.PhotoImage(image = PIL.Image.fromarray(self.frame))
self.canvas.create_image(1, 1, image = self.photo, anchor="nw")
self.root.after(self.delay, self.start_video)
def start_webcam(self):
self.vid = cv.VideoCapture(0)
self.start_video()
def open_file(self):
fopen = askopenfile(mode='rb', defaultextension=".mp4", filetypes=(("Video files", ".mp4"), ("All files", ".*")))
if fopen == None: return
else:
self.vid = cv.VideoCapture(fopen.name)
def video(self):
self.open_file()
self.start_video()
root = Tk()
root.title("Variant 2")
root.geometry('1100x550')
root.resizable(False, False)
app = Application(root)
root.mainloop()
Вложения
Последнее редактирование модератором: