Ich hatte die Möglichkeit, die verwendete Farbe (RGB) aus dem Bild zu extrahieren, daher ist dies ein Memo.
Sprache, Paket | Ausführung |
---|---|
Python | 3.7.4 |
numpy | 1.16.4 |
OpenCV | 3.4.2 |
lena.jpg
Ü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.
Erhalten Sie beispielsweise den BGR-Wert oben links unten.
print(bgr_array[0, 0, :])
# [128 138 225]
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
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
Ich habe vorgestellt, wie man einzigartige Farben im Bild extrahiert.
Recommended Posts