[PYTHON] Bildfarbe extrahieren (RGB)

Einführung

Ich hatte die Möglichkeit, die verwendete Farbe (RGB) aus dem Bild zu extrahieren, daher ist dies ein Memo.

Umgebung

Sprache, Paket

Sprache, Paket Ausführung
Python 3.7.4
numpy 1.16.4
OpenCV 3.4.2

Bild

lena.jpg

Überprüfen Sie die Größe des Bildes

Überprüfen Sie das zu verwendende Bild.

import cv2
import numpy as np

bgr_array = cv2.imread('lena.jpg')
print(bgr_array.shape)
# (512, 512, 3)

Beim Importieren von Bildern mit OpenCV sind die Farben in der Reihenfolge ** BGR **. Daher ist das Bild, dass drei ** B ** -, ** G ** -, ** R ** -Matrizen von 512 x 512 aneinandergereiht sind.

Holen Sie sich GBR

Erhalten Sie beispielsweise den BGR-Wert oben links unten.

print(bgr_array[0, 0, :])
# [128 138 225]

Bildgröße ändern

Bei der obigen Methode ist es erforderlich, den BGR-Wert 512 x 512 Mal zu erfassen. Erstellen Sie die folgende Matrix für einen effizienten Betrieb.

\left[
    \begin{array}{rrr}
      b_{0} & g_{0} & r_{0} \\
      \vdots & \vdots &  \vdots \\
      b_{n} & g_{n} & r_{n}
    \end{array}
  \right]

Wobei "n = 512 * 512-1". Dann extrahieren wir eindeutige Werte in Zeilenrichtung.

reshaped_bgr_array = bgr_array.reshape(512*512, 3)

# axis=Geben Sie die Zeileneindeutigkeit mit 0 an
unique_bgr_array = np.unique(reshaped_bgr_array, axis=0)

#Liste der eindeutigen bgr-Werte
print(unique_bgr_array)
"""
[[ 29  14  76]
 [ 31  11  86]
 [ 31  27 146]
 ...
 [224 175 191]
 [224 180 197]
 [225 247 253]]
"""

#Anzahl der eindeutigen bgr-Werte
print(len(unique_bgr_array))
# 73852

#Verhältnis des eindeutigen bgr-Werts zur Gesamtzahl der Pixel
print(len(unique_bgr_array)/(512*512))
# 0.2817230224609375

Funktionalisierung

Der obige Code hängt von der Größe des Bildes ab. Machen Sie es zu einer Funktion, damit es wiederverwendet werden kann.

def extract_unique_color(img_path, rgb=False):
    bgr_array = cv2.imread(img_path)
    row, col, _ = bgr_array.shape
    reshaped_bgr_array = bgr_array.reshape(row * col, 3)
    unique_color_array = np.unique(reshaped_bgr_array, axis=0)

    if rgb:
        #Sortieren Sie Elemente in RGB
        unique_color_array = unique_color_array[:, [2, 1, 0]]

    return unique_color_array

Schließlich

Ich habe vorgestellt, wie man einzigartige Farben im Bild extrahiert.

Recommended Posts

Bildfarbe extrahieren (RGB)
Extrahieren Sie Feature-Punkte eines Bildes
Erstellen Sie ein zusammengesetztes RGB 3-Farbdiagramm
Bildverarbeitung mit Python 100 Knock # 6 Farbreduktionsverarbeitung
Bildverarbeitung 100 Klopfen Q.6. Erklärung der Farbreduktionsverarbeitung
Extrahieren Sie die Farbe des Objekts im Bild mit Mask R-CNN und K-Means Clustering