[PYTHON] Extrahieren Sie die dominante Bildfarbe durch k-Mittel-Clustering

Dominante Farbe ist der Farbton, der das gesamte Farbschema dominiert. --Google

Extrahieren Sie 5 Farben und zeichnen Sie proportional ein Kreisdiagramm.

input.jpg out.png input.jpg out.png input.jpg out.png

Paket zu verwenden

$ pip install opencv-python
$ pip install scikit-learn
$ pip install matplotlib

Bild laden

Erstellen Sie eine RGB-Liste, um die Bilddaten zu erstellen, die k-means gruppiert werden können

import cv2
import itertools

image = cv2.imread('./input.jpg')
rgbs = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
rgb_list = list(itertools.chain(*rgbs.tolist()))

k-means Anzahl der zu extrahierenden Farben = Anzahl der Cluster Hier sind 5 Beispiele:

from sklearn.cluster import KMeans

clusters = KMeans(n_clusters=5).fit(rgb_list)

Das Zentrum des Clusters ist die dominierende Farbe

colors = clusters.cluster_centers_
print(colors)
[[ 25.29093216 119.84721127 142.13737995]
 [223.23362209 201.96734673 193.59849205]
 [176.3426999  108.01350558 118.93074255]
 [  8.36396613  14.71480369  27.54413049]
 [ 98.95068783  32.240443    48.93265647]]
#rgb

Berechnen Sie den Prozentsatz jedes Clusters

import numpy as np

def cluster_percents(labels):
    total = len(labels)
    percents = []
    for i in set(labels):
        percent = (np.count_nonzero(labels == i) / total) * 100
        percents.append(round(percent, 2))
    return percents
percents = cluster_percents(clusters.labels_)
print(percents)
[9.16, 9.6, 11.51, 48.37, 21.35]
#%

Zeichnen Sie ein Kreisdiagramm

Skalieren, da die Farbe von matplotlib nur RGB akzeptiert, das von 0 bis 1 skaliert ist.

import matplotlib.pyplot as plt

colors = clusters.cluster_centers_ / 255
colors = colors.tolist()

Sortieren Sie die Proportionen von groß nach klein, damit das Kreisdiagramm schön aussieht.

percents = cluster_percents(clusters.labels_)
tup = zip(colors, percents)
sorted_tup = sorted(tup, key=lambda n: n[1], reverse=True)
sorted_colors = [c for c,p in sorted_tup]
sorted_percents = [p for c,p in sorted_tup]

Zeichnen Sie ein Kreisdiagramm

plt.pie(sorted_percents, colors=sorted_colors, counterclock=False, startangle=90)
plt.show()

Recommended Posts

Extrahieren Sie die dominante Bildfarbe durch k-Mittel-Clustering
Extrahieren Sie die Farbe des Objekts im Bild mit Mask R-CNN und K-Means Clustering
[Grob] Clustering mit K-Mitteln
Bildfarbe extrahieren (RGB)
Extrahieren Sie Feature-Punkte eines Bildes
Graustufen durch Matrix-Reinventor der Python-Bildverarbeitung-
Bildverarbeitung mit Python 100 Knock # 6 Farbreduktionsverarbeitung
Analyse des Röntgenmikrotomographiebildes durch Python
Richter Yosakoi Naruko nach Bildklassifikation von Tensorflow.
Super (kurze) Zusammenfassung der Bildklassifizierung durch ArcFace
ROS-Kurs 119 Korrigieren Sie die Farbe des Kamerabildes
Bild der Schließung
Extrahieren Sie die Tabelle der Bilddateien mit OneDrive & Python
Bildverarbeitung durch Matrix Basics & Contents-Reinventor der Python-Bildverarbeitung-
Holen Sie sich das Bild von "Suzu Hirose" von Google Bildersuche.
Clustering und Hauptkomponentenanalyse nach der K-Means-Methode (Anfänger)