Предоставлен код, который анализирует цвета изображения с использованием алгоритма KMeans и строит круговую диаграмму с наиболее часто встречающимися цветами. Для интеграции этого кода в графический интерфейс Tkinter, вы можете использовать следующий пример:
from collections import Counter
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import numpy as np
import tkinter as tk
from tkinter import filedialog
import cv2
from PIL import Image, ImageTk
class ColorAnalysisApp:
def __init__(self, root):
self.root = root
self.root.title("Color Analysis App")
self.number_of_colors = 3
self.canvas = tk.Canvas(self.root, width=900, height=600)
self.canvas.pack()
self.image_label = tk.Label(self.root)
self.image_label.pack()
self.load_button = tk.Button(self.root, text="Load Image", command=self.load_image)
self.load_button.pack()
self.analyze_button = tk.Button(self.root, text="Analyze Colors", command=self.analyze_colors)
self.analyze_button.pack()
self.result_label = tk.Label(self.root)
self.result_label.pack()
self.fig = plt.figure(figsize=(4, 4))
self.result_image = None
def load_image(self):
path = filedialog.askopenfilename()
self.original_image = cv2.imread(path)
self.display_image(self.original_image)
def display_image(self, img):
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = Image.fromarray(img)
img = ImageTk.PhotoImage(img)
self.image_label.config(image=img)
self.image_label.image = img
def analyze_colors(self):
modified_image = self.prep_image(self.original_image)
res_image = self.color_analysis(modified_image)
self.result_image = res_image
self.display_result(self.result_image)
def prep_image(self, raw_img):
raw_img = cv2.cvtColor(raw_img, cv2.COLOR_BGR2RGB)
modified_img = cv2.resize(raw_img, (900, 600), interpolation=cv2.INTER_AREA)
modified_img = modified_img.reshape(modified_img.shape[0] * modified_img.shape[1], 3)
return modified_img
def color_analysis(self, img):
clf = KMeans(n_init=10, n_clusters=self.number_of_colors)
color_labels = clf.fit_predict(img)
# ... остальной код анализа ...
def display_result(self, img):
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = Image.fromarray(img)
img = ImageTk.PhotoImage(img)
self.result_label.config(image=img)
self.result_label.image = img
if __name__ == "__main__":
root = tk.Tk()
app = ColorAnalysisApp(root)
root.mainloop()
Этот код создает класс ColorAnalysisApp, который представляет ваше приложение с графическим интерфейсом Tkinter. Вы можете использовать кнопку "Load Image", чтобы загрузить изображение, а затем кнопку "Analyze Colors", чтобы проанализировать его цвета. Результат анализа также будет отображен на экране. Вам нужно вставить ваш код анализа цветов в метод color_analysis. Обратите внимание, что вам может потребоваться внести изменения в ваш код анализа цветов, чтобы он работал с этой структурой корректно.