Dieses Projekt dient der digitalen Umwandlung von Bildern in simulierte Darstellung aus Sicht eines rot-grün-blinden Menschen.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Dyschromasie-Applikation.py 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. from PIL import Image, ImageTk
  2. import PIL
  3. import tkinter as tk
  4. import cv2
  5. import numpy as np
  6. from Farbaenderung import Dyschromasie
  7. from Scrollbar import ScrollFrame
  8. root = tk.Tk()
  9. simGrad = tk.IntVar(root)
  10. root.title("Projekt Dyschromasie")
  11. SB = ScrollFrame(root)
  12. img = np.array([])
  13. rows = 0
  14. cols = 0
  15. kanaele = 0
  16. sim_pro = tk.IntVar(root)
  17. sim_deut = tk.IntVar(root)
  18. sim_tri = tk.IntVar(root)
  19. simulationsGradient = tk.Scale(SB.frame, from_=0, to_=100, variable=simGrad, orient='horizontal')
  20. simulationsGradient.grid(column= 0, row = 1, columnspan=10)
  21. def browse():
  22. # Auswahl des FilePaths
  23. try:
  24. path = tk.filedialog.askopenfilename(filetypes=[("Image File", '.jpg'),("Image File", '.png')])
  25. im = Image.open(path)
  26. except:
  27. tk.messagebox.showerror(title='Datenfehler', message='Kein Bild gefunden/ausgewählt')
  28. global simulateButton
  29. if len(path) > 0:
  30. simulateButton.config(state='active')
  31. # Anzeigen des Bildes
  32. tkimage = ImageTk.PhotoImage(im)
  33. myvar = tk.Label(SB.frame, image=tkimage)
  34. myvar.image = tkimage
  35. myvar.grid(columnspan=5)
  36. # Einspeichern der Path-Informationen
  37. global img, rows, cols, kanaele
  38. img = cv2.imread(path)
  39. img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  40. rows, cols, kanaele = img.shape
  41. def simulate():
  42. global img, rows, cols, kanaele, sim_pro, sim_deut, sim_tri
  43. if sim_deut.get():
  44. d = Dyschromasie(img, rows, cols, kanaele, simGrad.get()/100, 'd')
  45. display_array_deut = np.copy(d.Simulate()).astype('uint8')
  46. T = tk.Text(SB.frame, height=1, width=15)
  47. T.grid(columnspan=5)
  48. print_string = "Deutranop(" + str(round(d.sim_faktor*100)) + "%)"
  49. T.insert('current', print_string)
  50. conv_SimulationPic_deut = ImageTk.PhotoImage(image=PIL.Image.fromarray(display_array_deut))
  51. sim_pic_deut = tk.Label(SB.frame, image=conv_SimulationPic_deut)
  52. sim_pic_deut.Image = conv_SimulationPic_deut
  53. sim_pic_deut.grid(columnspan=5)
  54. elif sim_tri.get():
  55. t = Dyschromasie(img, rows, cols, kanaele, simGrad.get()/100, 't')
  56. display_array_tri = np.copy(t.Simulate()).astype('uint8')
  57. T = tk.Text(SB.frame, height=1, width=15)
  58. T.grid(columnspan=5)
  59. print_string = "Tritanop(" + str(round(t.sim_faktor * 100)) + "%)"
  60. T.insert('current', print_string)
  61. conv_SimulationPic_tri = ImageTk.PhotoImage(image=PIL.Image.fromarray(display_array_tri))
  62. sim_pic_tri = tk.Label(SB.frame, image=conv_SimulationPic_tri)
  63. sim_pic_tri.Image = conv_SimulationPic_tri
  64. sim_pic_tri.grid(columnspan=5)
  65. elif sim_pro.get():
  66. p = Dyschromasie(img, rows, cols, kanaele, simGrad.get()/100, 'p')
  67. display_array_pro = np.copy(p.Simulate()).astype('uint8')
  68. T = tk.Text(SB.frame, height=1, width=15)
  69. T.grid(columnspan=5)
  70. print_string = "Protanop(" + str(round(p.sim_faktor * 100)) + "%)"
  71. T.insert('current', print_string)
  72. conv_SimulationPic_pro = ImageTk.PhotoImage(image=PIL.Image.fromarray(display_array_pro))
  73. sim_pic_pro = tk.Label(SB.frame, image=conv_SimulationPic_pro)
  74. sim_pic_pro.Image = conv_SimulationPic_pro
  75. sim_pic_pro.grid(columnspan=5)
  76. btn = tk.Button(SB.frame, text="Browse", width=25, command=browse, bg='light blue')
  77. btn.grid(column=0, row=0, columnspan=2)
  78. simulateButton = tk.Button(SB.frame, text="Simulate", width=25, command=simulate, bg='light blue')
  79. simulateButton.grid(column=1, row=0, columnspan=2)
  80. simulateButton.config(state='disabled')
  81. checkButton_p = tk.Checkbutton(SB.frame, text="Protanop", variable=sim_pro, onvalue=1, offvalue=0, height=5, width=20)
  82. checkButton_d = tk.Checkbutton(SB.frame, text="Deutanop", variable=sim_deut, onvalue=1, offvalue=0, height=5, width=20)
  83. checkButton_t = tk.Checkbutton(SB.frame, text="Tritanop", variable=sim_tri, onvalue=1, offvalue=0, height=5, width=20)
  84. checkButton_p.grid(column=0, row=2)
  85. checkButton_d.grid(column=1, row=2)
  86. checkButton_t.grid(column=2, row=2)
  87. SB.update()
  88. root.mainloop()