- from PIL import Image, ImageTk
- import PIL
- import tkinter as tk
- from tkinter import filedialog, messagebox
- import cv2
- import numpy as np
- from Farbaenderung import gammaCorrection, reverseGammaCorrection, Dyschromasie
- from Scrollbar import ScrollFrame
-
- root = tk.Tk()
- simGrad = tk.IntVar(root)
-
- root.title("Projekt Dyschromasie")
-
- SB = ScrollFrame(root)
-
- img = np.array([])
- rows = 0
- cols = 0
- kanaele = 0
-
- sim_pro = tk.IntVar(root)
- sim_deut = tk.IntVar(root)
- sim_tri = tk.IntVar(root)
-
- simulationsGradient = tk.Scale(SB.frame, from_=0, to_=100, variable=simGrad, orient='horizontal')
- simulationsGradient.grid(column= 0, row = 1, columnspan=10)
-
- def browse():
- # Auswahl des FilePaths
- try:
- path = tk.filedialog.askopenfilename(filetypes=[("Image File", '.jpg'),("Image File", '.png')])
- im = Image.open(path)
- except:
- tk.messagebox.showerror(title='Datenfehler', message='Kein Bild gefunden/ausgewählt')
- global simulateButton
- if len(path) > 0:
- simulateButton.config(state='active')
-
- # Anzeigen des Bildes
- tkimage = ImageTk.PhotoImage(im)
- myvar = tk.Label(SB.frame, image=tkimage)
- myvar.image = tkimage
- myvar.grid(columnspan=5)
-
- # Einspeichern der Path-Informationen
- global img, rows, cols, kanaele
- img = cv2.imread(path)
- img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
- #img = cv2.GaussianBlur(img, (3, 3), 0)
- rows, cols, kanaele = img.shape
-
-
- def simulate():
- global img, rows, cols, kanaele, sim_pro, sim_deut, sim_tri
- if sim_deut.get():
- d = Dyschromasie(img, rows, cols, kanaele, simGrad.get()/100, 'd')
- display_array_deut = np.copy(d.Simulate()).astype('uint8')
-
- T = tk.Text(SB.frame, height=1, width=15)
- T.grid(columnspan=5)
- print_string = "Deutranop(" + str(round(d.sim_faktor*100)) + "%)"
- T.insert('current', print_string)
-
- conv_SimulationPic_deut = ImageTk.PhotoImage(image=PIL.Image.fromarray(display_array_deut))
- sim_pic_deut = tk.Label(SB.frame, image=conv_SimulationPic_deut)
- sim_pic_deut.Image = conv_SimulationPic_deut
- sim_pic_deut.grid(columnspan=5)
- elif sim_tri.get():
- t = Dyschromasie(img, rows, cols, kanaele, simGrad.get()/100, 't')
- display_array_tri = np.copy(t.Simulate()).astype('uint8')
-
- T = tk.Text(SB.frame, height=1, width=15)
- T.grid(columnspan=5)
- print_string = "Tritanop(" + str(round(t.sim_faktor * 100)) + "%)"
- T.insert('current', print_string)
-
- conv_SimulationPic_tri = ImageTk.PhotoImage(image=PIL.Image.fromarray(display_array_tri))
- sim_pic_tri = tk.Label(SB.frame, image=conv_SimulationPic_tri)
- sim_pic_tri.Image = conv_SimulationPic_tri
- sim_pic_tri.grid(columnspan=5)
- elif sim_pro.get():
- p = Dyschromasie(img, rows, cols, kanaele, simGrad.get()/100, 'p')
- display_array_pro = np.copy(p.Simulate()).astype('uint8')
-
- T = tk.Text(SB.frame, height=1, width=15)
- T.grid(columnspan=5)
- print_string = "Protanop(" + str(round(p.sim_faktor * 100)) + "%)"
- T.insert('current', print_string)
-
- conv_SimulationPic_pro = ImageTk.PhotoImage(image=PIL.Image.fromarray(display_array_pro))
- sim_pic_pro = tk.Label(SB.frame, image=conv_SimulationPic_pro)
- sim_pic_pro.Image = conv_SimulationPic_pro
- sim_pic_pro.grid(columnspan=5)
-
-
- btn = tk.Button(SB.frame, text="Browse", width=25, command=browse, bg='light blue')
- btn.grid(column=0, row=0, columnspan=2)
-
- simulateButton = tk.Button(SB.frame, text="Simulate", width=25, command=simulate, bg='light blue')
- simulateButton.grid(column=1, row=0, columnspan=2)
- simulateButton.config(state='disabled')
-
- checkButton_p = tk.Checkbutton(SB.frame, text="Protanop", variable=sim_pro, onvalue=1, offvalue=0, height=5, width=20)
- checkButton_d = tk.Checkbutton(SB.frame, text="Deutanop", variable=sim_deut, onvalue=1, offvalue=0, height=5, width=20)
- checkButton_t = tk.Checkbutton(SB.frame, text="Tritanop", variable=sim_tri, onvalue=1, offvalue=0, height=5, width=20)
-
- checkButton_p.grid(column=0, row=2)
- checkButton_d.grid(column=1, row=2)
- checkButton_t.grid(column=2, row=2)
-
- SB.update()
- root.mainloop()
|