Na tom matplotu je pěkné, že poskytuje to zoomování a nemusíš to řešit sám. Ale nevím s čím zápasíš. Máš souřadnice, máš data a můžeš si s tím dělat co chceš :)
import cv2
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
import tkinter as tk
def main():
root = tk.Tk()
filename = tk.filedialog.askopenfilename(
filetypes=(
("Images", (".bmp", ".jpg", ".png")),
("All files", "*.*"),
)
)
if not filename:
return
image = cv2.cvtColor(cv2.imread(filename), cv2.COLOR_BGR2RGB)
fig, ax = plt.subplots()
ax.imshow(image)
fig_canvas = FigureCanvasTkAgg(fig, root)
fig_canvas.get_tk_widget().pack(expand=True, fill=tk.BOTH)
fig_toolbar = NavigationToolbar2Tk(fig_canvas, root, pack_toolbar=False)
fig_toolbar.pack(fill=tk.X)
pixel_canvas = tk.Canvas(root, width=100, height=50, background="white")
pixel_canvas.pack()
pixel_label = tk.Label(root, text="RGB: ---\nHLS: ---")
pixel_label.pack()
doit_button = tk.Button(root, text="do stuff")
doit_button.pack()
def pick_color(event):
if event.button != 1 or event.xdata is None:
return
x, y = int(event.xdata), int(event.ydata)
rgb = image[y, x]
hls = cv2.cvtColor(image[y : y + 1, x : x + 1], cv2.COLOR_RGB2HLS)[0, 0]
hex_rgb = "#%02X%02X%02X" % tuple(rgb)
hex_hls = "#%02X%02X%02X" % tuple(hls)
pixel_canvas.config(background=hex_rgb)
pixel_label.config(text=f"RGB: {hex_rgb}\nHLS: {hex_hls}")
def do_stuff():
print("hello")
fig_canvas.mpl_connect("button_press_event", pick_color)
fig_canvas.mpl_connect("motion_notify_event", pick_color)
doit_button.config(command=do_stuff)
root.mainloop()
if __name__ == "__main__":
main()