Cette fois, nous obtiendrons la couleur principale de l'image chargée. Nous allons diviser le Pokémon de couleur normale et le Pokémon de couleur différente en 5 couleurs principales afin que vous puissiez les comparer.
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import argparse
import utils
import cv2
import numpy as np
Lorsque l'image est lue par OpenCV, elle est convertie en RVB car c'est BGR tel quel.
image_path = "./Wonoragon 00001.jpg "
image = cv2.imread(image_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
Formez un tableau NumPy dans une liste de pixels RVB.
image = image.reshape((image.shape[0] * image.shape[1], 3))
k-means
Utilisez k-means pour trouver la couleur la plus dominante. Faites le nombre de clusters 5 et regroupez la liste des pixels RVB.
clt = KMeans(n_clusters = 5)
clt.fit(image)
Trouvez le pourcentage de la couleur principale à partir de l'histogramme.
numLabels = np.arange(0, len(np.unique(clt.labels_)) + 1)
(hist, _) = np.histogram(clt.labels_, bins=numLabels)
hist = hist.astype("float")
hist /= hist.sum()
Utilisez l'instruction for pour extraire les cinq couleurs principales et leurs ratios.
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
Affiche 5 couleurs principales.
plt.figure()
plt.axis("off")
plt.imshow(bar)
plt.show()
Capture d'écran originale (Wonoragon)
Résultat d'exécution
0.7486892361111112 #dd4928
0.05908420138888889 #0b0403
0.038871527777777776 #b7d1e0
0.13411458333333334 #d21d1d
0.01924045138888889 #294e37
Capture d'écran originale (Wonoragon de couleur différente)
Résultat d'exécution
0.7698796296296296 #dd4828
0.03972407407407407 #c9d0ca
0.026488888888888888 #262220
0.025824074074074076 #6e6166
0.13808333333333334 #d41d1a
J'ai pu obtenir 5 couleurs principales, mais si elles restaient telles quelles, la proportion de l'arrière-plan augmenterait. Parce que j'ai pu obtenir la couleur principale de Pokemon à partir des trois couleurs à l'exclusion de la couleur principale de la couleur de fond À partir de là, il semble que vous puissiez juger s'il s'agit d'une couleur différente.
OpenCV and Python K-Means Color Clustering
Extraire la couleur principale de l'image avec Python
Recommended Posts