Dieses Mal erhalten wir die Hauptfarbe aus dem geladenen Bild. Wir werden das normale Farbpokemon und das unterschiedliche Farbpokemon in 5 Hauptfarben unterteilen, damit Sie sie vergleichen können.
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import argparse
import utils
import cv2
import numpy as np
Wenn das Bild von OpenCV gelesen wird, wird es in RGB konvertiert, da es so wie es ist BGR ist.
image_path = "./Wonoragon 00001.jpg "
image = cv2.imread(image_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
Bilden Sie ein NumPy-Array zu einer Liste von RGB-Pixeln.
image = image.reshape((image.shape[0] * image.shape[1], 3))
k-means
Verwenden Sie k-means, um die dominanteste Farbe zu finden. Machen Sie die Anzahl der Cluster 5 und gruppieren Sie die Liste der RGB-Pixel.
clt = KMeans(n_clusters = 5)
clt.fit(image)
Finden Sie den Prozentsatz der Hauptfarbe aus dem Histogramm.
numLabels = np.arange(0, len(np.unique(clt.labels_)) + 1)
(hist, _) = np.histogram(clt.labels_, bins=numLabels)
hist = hist.astype("float")
hist /= hist.sum()
Verwenden Sie die for-Anweisung, um die fünf Hauptfarben und ihre Verhältnisse zu extrahieren.
bar = np.zeros((50, 300, 3), dtype="uint8")
cluster_centers_arr = clt.cluster_centers_.astype(int, copy=False)
startX = 0
for (percent, color) in zip(hist, cluster_centers_arr):
color_hex_str = '#%02x%02x%02x' % tuple(color)
print(percent , color_hex_str)
endX = startX + (percent * 300)
cv2.rectangle(bar, (int(startX), 0), (int(endX), 50),color.astype("uint8").tolist(), -1)
startX = endX
Zeigt 5 Hauptfarben an.
plt.figure()
plt.axis("off")
plt.imshow(bar)
plt.show()
Original-Screenshot (Wonoragon)
Ausführungsergebnis
0.7486892361111112 #dd4928
0.05908420138888889 #0b0403
0.038871527777777776 #b7d1e0
0.13411458333333334 #d21d1d
0.01924045138888889 #294e37
Original-Screenshot (Wonoragon in verschiedenen Farben)
Ausführungsergebnis
0.7698796296296296 #dd4828
0.03972407407407407 #c9d0ca
0.026488888888888888 #262220
0.025824074074074076 #6e6166
0.13808333333333334 #d41d1a
Ich konnte 5 Hauptfarben erhalten, aber wenn es so blieb, wie es war, würde sich der Anteil des Hintergrunds erhöhen. Weil ich die Hauptfarbe von Pokemon aus den drei Farben ohne die Hauptfarbe der Hintergrundfarbe erhalten konnte Von dort aus können Sie anscheinend beurteilen, ob es sich um eine andere Farbe handelt.
OpenCV and Python K-Means Color Clustering
Extrahieren Sie die Hauptfarbe mit Python aus dem Bild
Recommended Posts