[Python] Obtenez la couleur principale de la capture d'écran

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.

importer

from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import argparse
import utils
import cv2
import numpy as np

Acquisition d'image

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()

Obtenez la couleur principale

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()

Résultat d'exécution

Capture d'écran originale (Wonoragon) ウオノラゴン.png

Résultat d'exécution

0.7486892361111112 #dd4928
0.05908420138888889 #0b0403
0.038871527777777776 #b7d1e0
0.13411458333333334 #d21d1d
0.01924045138888889 #294e37
通常配色.png

Capture d'écran originale (Wonoragon de couleur différente) 色違いウオノラゴン.png

Résultat d'exécution

0.7698796296296296 #dd4828
0.03972407407407407 #c9d0ca
0.026488888888888888 #262220
0.025824074074074076 #6e6166
0.13808333333333334 #d41d1a
色違い配色.png

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.

référence

OpenCV and Python K-Means Color Clustering

Extraire la couleur principale de l'image avec Python

Recommended Posts

[Python] Obtenez la couleur principale de la capture d'écran
Récupérer le contenu de git diff depuis python
[Python] Récupérez le texte de la loi à partir de l'API e-GOV law
Récupérer le code retour d'un script Python depuis bat
[Python] Ajustement de la barre de couleurs
[Python] Récupérez le mois précédent
Obtenez votre fréquence cardiaque à partir de l'API fitbit en Python!
Obtenez la valeur tout en spécifiant la valeur par défaut de dict en Python
Obtenez le chemin du bureau en Python
Existence du point de vue de Python
Obtenez la météo avec les requêtes Python
Obtenez la météo avec les requêtes Python 2
Obtenez le chemin du script en Python
[Python] Ajuster la norme de la carte des couleurs
Comment obtenir la version Python
Utilisez l'API Flickr de Python
python Obtenez la météo à venir de l'API météo
Obtenez le chemin du bureau en Python
Obtenez le nom d'hôte en Python
Remarque Python: obtenez le mois en cours
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
[Python] Obtenir la date de mise à jour d'un article d'actualité à partir de HTML
Obtenir le code HTML de l'élément avec du sélénium Python
Obtenez des taux de change à partir des taux de change ouverts en Python
[Note] Obtenir des données de PostgreSQL avec Python
Récupérer les frappes de / dev / input (python evdev)
Notes d'apprentissage depuis le début de Python 1
[Python] Récupère le nom de la variable avec str
Obtenez le niveau de la batterie de SwitchBot avec Python
Lancez l'interpréteur Python depuis Git bash
Depuis Python 3.4, pip devient le programme d'installation standard! ??
[Python] Récupère le code de caractère du fichier
Obtenir la liste de codes EDINET en Python
Obtenez la probabilité de précipitation de XML avec Python
Obtenez l'adresse à partir de la latitude et de la longitude
Recevez les publications wordpress de la semaine dernière
Notes d'apprentissage depuis le début de Python 2
Récupérez uniquement le texte du formulaire Django.
Obtenir l'historique des métriques de MLflow en Python
Obtenez des données de séries chronologiques de k-db.com avec Python
Obtenez la météo à Osaka via l'API Web (python)
[Python] Obtenir / modifier l'étiquette d'échelle de la figure
Récupérer l'appelant d'une fonction en Python
[Bash] Obtenez la puissance de python de bash en utilisant la documentation ici
sql à sql
Obtenez le titre de la fenêtre du système X Window en Python
[Python] Obtenez la dernière date de mise à jour du site Web
MeCab de Python
Comment obtenir les fichiers dans le dossier [Python]
Obtenez des informations sur la carte BTC / JPY de Python --bitflyer
[Python] J'ai essayé d'obtenir le nom du type sous forme de chaîne de caractères à partir de la fonction type
Utilisez le module Python nghttp2 de Homebrew de Python de pyenv
[Python] Get the day (anglais et japonais)
Obtenez uniquement des articles de pages Web en Python
Essayez d'accéder à l'API YQL directement depuis Python 3
Obtenez la date de mise à jour du fichier de mémorandum Python.
Passez un tableau de PHP à PYTHON et effectuez un traitement numpy pour obtenir le résultat
[Python] Comment supprimer les valeurs en double de la liste
Le mur lors du passage du service Django de Python 2.7 à la série Python 3