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.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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. daltonButton.config(state='active')
  32. # Anzeigen des Bildes
  33. tkimage = ImageTk.PhotoImage(im)
  34. myvar = tk.Label(SB.frame, image=tkimage)
  35. myvar.image = tkimage
  36. myvar.grid(columnspan=5)
  37. # Einspeichern der Path-Informationen
  38. global img, rows, cols, kanaele
  39. img = cv2.imread(path)
  40. img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  41. rows, cols, kanaele = img.shape
  42. def showImage(img, rows, cols, kanaele, sim_faktor, sim_kind, sim_art):
  43. color_blindness = Dyschromasie(img, rows, cols, kanaele, sim_faktor, sim_kind)
  44. if sim_art == 'Sim':
  45. color_blindness_mat = np.copy(color_blindness.Simulate()).astype('uint8')
  46. else:
  47. color_blindness_mat = np.copy(color_blindness.daltonize()).astype('uint8')
  48. T = tk.Text(SB.frame, height=1, width=15)
  49. T.grid(columnspan=5)
  50. print_string = sim_kind + ' ' + str(round(color_blindness.sim_faktor * 100)) + "%)"
  51. T.insert('current', print_string)
  52. conv_SimulationPic = ImageTk.PhotoImage(image=PIL.Image.fromarray(color_blindness_mat))
  53. sim_pic = tk.Label(SB.frame, image=conv_SimulationPic)
  54. sim_pic.Image = conv_SimulationPic
  55. sim_pic.grid(columnspan=5)
  56. def simulate():
  57. global img, rows, cols, kanaele, sim_pro, sim_deut, sim_tri
  58. if sim_deut.get():
  59. showImage(img, rows, cols, kanaele, simGrad.get()/100, 'Deuteranop', 'Sim')
  60. elif sim_tri.get():
  61. showImage(img, rows, cols, kanaele, simGrad.get() / 100, 'Tritanop', 'Sim')
  62. elif sim_pro.get():
  63. showImage(img, rows, cols, kanaele, simGrad.get() / 100, 'Protanop', 'Sim')
  64. def daltonize():
  65. global img, rows, cols, kanaele, sim_pro, sim_deut, sim_tri
  66. if sim_deut.get():
  67. showImage(img, rows, cols, kanaele, simGrad.get()/100, 'Deuteranop', 'Dalt')
  68. elif sim_tri.get():
  69. showImage(img, rows, cols, kanaele, simGrad.get() / 100, 'Tritanop', 'Dalt')
  70. elif sim_pro.get():
  71. showImage(img, rows, cols, kanaele, simGrad.get() / 100, 'Protanop', 'Dalt')
  72. browseButton = tk.Button(SB.frame, text="Browse", width=25, command=browse, bg='light blue')
  73. browseButton.grid(column=0, row=0, columnspan=1)
  74. simulateButton = tk.Button(SB.frame, text="Simulate", width=25, command=simulate, bg='light blue')
  75. simulateButton.grid(column=1, row=0, columnspan=1)
  76. simulateButton.config(state='disabled')
  77. daltonButton = tk.Button(SB.frame, text="Daltonize", width=25, command=daltonize, bg='light blue')
  78. daltonButton.grid(column=2, row=0, columnspan=1)
  79. daltonButton.config(state='disabled')
  80. checkButton_p = tk.Checkbutton(SB.frame, text="Protanop", variable=sim_pro, onvalue=1, offvalue=0, height=5, width=20)
  81. checkButton_d = tk.Checkbutton(SB.frame, text="Deutanop", variable=sim_deut, onvalue=1, offvalue=0, height=5, width=20)
  82. checkButton_t = tk.Checkbutton(SB.frame, text="Tritanop", variable=sim_tri, onvalue=1, offvalue=0, height=5, width=20)
  83. checkButton_p.grid(column=0, row=2)
  84. checkButton_d.grid(column=1, row=2)
  85. checkButton_t.grid(column=2, row=2)
  86. SB.update()
  87. root.mainloop()