import cv2 # Importování knihovny OpenCV pro manipulaci s obrázky
import matplotlib.pyplot as plt # Importování knihovny Matplotlib pro vizualizaci dat
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk # Importování nástrojů pro propojení Matplotlibu s Tkinterem
import tkinter as tk # Importování knihovny Tkinter pro tvorbu grafických uživatelských rozhraní
def main():
<--- ODSAZENÍ PRO FUNKCI MAIN --->
# Vytvoření okna Tkinteru root = tk.Tk()
# Dialog pro výběr obrázku
filename = tk.filedialog.askopenfilename(
filetypes=(
("Images", (".bmp", ".jpg", ".png")), # Filtrování typů souborů
("All files", "*.*"),
)
)
if not filename: # Pokud uživatel nevybere žádný soubor, ukončíme funkci
return
# Načtení obrázku pomocí OpenCV a konverze barevného prostoru na RGB
image = cv2.cvtColor(cv2.imread(filename), cv2.COLOR_BGR2RGB)
# Vytvoření instance Matplotlibu pro zobrazení obrázku
fig, ax = plt.subplots()
ax.imshow(image)
# Propojení Matplotlibu s Tkinterem pomocí instance FigureCanvasTkAgg
fig_canvas = FigureCanvasTkAgg(fig, root)
# Získání widgetu Tkinteru pro zobrazení grafu a jeho umístění ve vizuálním rozhraní
# Argumenty:
# - expand=True: Graf se bude roztahovat, aby vyplnil veškerý dostupný prostor
# - fill=tk.BOTH: Graf se bude roztahovat jak horizontálně, tak vertikálně
fig_canvas.get_tk_widget().pack(expand=True, fill=tk.BOTH)
# Vytvoření navigační lišty pro interakci s grafem
fig_toolbar = NavigationToolbar2Tk(fig_canvas, root, pack_toolbar=False)
# Zobrazení navigační lišty v okně Tkinteru
# Argument fill=tk.X znamená, že navigační lišta bude vodorovně vyplněna dostupným prostorem
# tj. bude zabírat celou šířku okna
fig_toolbar.pack(fill=tk.X)
# Vytvoření canvasu pro zobrazení barevného vzorku pixelu
pixel_canvas = tk.Canvas(root, width=100, height=50, background="white")
pixel_canvas.pack() # Zobrazení canvasu v okně Tkinteru
# Vytvoření popisku pro zobrazení hodnot RGB a HLS pixelu
pixel_label = tk.Label(root, text="RGB: ---\nHLS: ---")
pixel_label.pack() # Zobrazení popisku v okně Tkinteru
# Vytvoření tlačítka pro spuštění akce "do stuff"
doit_button = tk.Button(root, text="do stuff")
doit_button.pack() # Zobrazení tlačítka v okně Tkinteru
# Funkce pro výběr barvy pixelu po kliknutí
def pick_color(event):
if event.button != 1 or event.xdata is None:
return
x, y = int(event.xdata), int(event.ydata)
# Získání hodnot RGB z pixelu v zobrazeném obrázku
rgb = image[y, x] # Konverze na HLS hls = cv2.cvtColor(image[y : y + 1, x : x + 1], cv2.COLOR_RGB2HLS)[0, 0]
# Konverze hodnot RGB na hexadecimální řetězec hex_rgb = "#%02X%02X%02X" % tuple(rgb)
# Konverze hodnot HLS na hexadecimální řetězec
hex_hls = "#%02X%02X%02X" % tuple(hls)
# Nastavení barvy canvasu na barvu pixelu pixel_canvas.config(background=hex_rgb)
# Nastavení textu popisku na hodnoty RGB a HLS pixel_label.config(text=f"RGB: {hex_rgb}\nHLS: {hex_hls}")
# Funkce pro provedení akce "do stuff"
def do_stuff():
print("hello")
# Připojení události kliknutí na obrázek k funkci pro výběr barvy pixelu
fig_canvas.mpl_connect("button_press_event", pick_color)
# Připojení události pohybu myší nad obrázkem k funkci pro výběr barvy pixelu
fig_canvas.mpl_connect("motion_notify_event", pick_color)
# Nastavení akce tlačítka "do stuff" na funkci "do_stuff"
doit_button.config(command=do_stuff)
# Spuštění hlavní smyčky Tkinteru pro zobrazení okna
root.mainloop()