Dobrý den, požádal jsem chatGPT o vytvoření programu python, kde vyberu obrázek a chci přiblížit vybranou oblast, poté kliknu na pixel a poté získám barvu RGB/HSV. Vytvořilo to všechno dobře, kromě jednoho problému. Nově vytvořené okno Figure 2 nekopíruje obrázek z Figure 1 (původní okno Zoom). Zdá se, že z Figure 1 nelze vybrat barvu, na Figure 1 tak vznikne Figure 2. Ale jak již bylo řečeno, obrázek 2 neobsahuje obrázek z Figure 2. A také pokud tam musí být Figure 2, pak měl by zakrývat Figure 1 a být nahoře, aby se zajistilo, že uživatel nemůže přepnout na Figure 1 náhodou a zmást okna. Může to prosím někdo opravit?
import cv2 # pip install opencv-python-headless
import matplotlib.pyplot as plt # pip install matplotlib
from matplotlib.patches import Rectangle
from tkinter import Tk, Canvas, PhotoImage, filedialog
import configparser
from ttkthemes import ThemedTk
class ImageAnalyzer:
def __init__(self):
self.selected_area = (0, 0, 0, 0)
self.large_image = None
self.fig = None
def load_image(self):
try:
filename = self.load_filename()
except KeyError:
root = ThemedTk(theme="equilux")
filename = filedialog.askopenfilename()
self.save_filename(filename)
root.destroy()
self.large_image = cv2.imread(filename)
self.large_image = cv2.cvtColor(self.large_image, cv2.COLOR_BGR2RGB)
self.fig, ax = plt.subplots()
ax.imshow(self.large_image)
ax.set_title('Select an area to zoom in')
self.cid = self.fig.canvas.mpl_connect('button_press_event', self.select_area)
plt.show()
def save_filename(self, filename):
config = configparser.ConfigParser()
config['DEFAULT'] = {'filename': filename}
with open('config.cfg', 'w') as configfile:
config.write(configfile)
def load_filename(self):
config = configparser.ConfigParser()
config.read('config.cfg')
return config['DEFAULT']['filename']
def select_area(self, event):
self.selected_area = (int(event.xdata), int(event.ydata), 0, 0)
self.fig.canvas.mpl_disconnect(self.cid)
fig, ax = plt.subplots()
ax.imshow(self.large_image[self.selected_area[1]:, self.selected_area[0]:])
ax.set_title('Click to select pixel')
self.cid = fig.canvas.mpl_connect('button_press_event', self.pick_color)
plt.show()
def pick_color(self, event):
x, y = int(event.xdata), int(event.ydata)
pixel_color = cv2.cvtColor(self.large_image[y:y+1, x:x+1], cv2.COLOR_BGR2RGB)[0,0]
print("RGB:", pixel_color)
hsl_color = cv2.cvtColor(self.large_image[y:y+1, x:x+1], cv2.COLOR_BGR2HLS)[0,0]
print("HSL:", hsl_color)
def run(self):
self.load_image()
if __name__ == "__main__":
analyzer = ImageAnalyzer()
analyzer.run()