[PYTHON] So erhalten Sie RGB- und HSV-Histogramme mit OpenCV

Einführung

Ich beschäftige mich mit Bildern und wollte die Informationen aus RGB- und HSV-Histogrammen als Merkmale verwenden. Also habe ich versucht, das Histogramm mit ** OpenCV ** zu extrahieren. Ich werde es als Memo hinterlassen.

Histogramm

Eine Membran kann als Graph oder Plot betrachtet werden, um die Gesamtverteilung der Pixelwerte in einem Bild zu kennen. Im Allgemeinen ist die horizontale Achse der Pixelwert und die vertikale Achse ist die Häufigkeit des Auftretens des Pixelwerts. Die Visualisierung des Histogramms ist eine Möglichkeit, das Bild zu verstehen. `

Was ist der Unterschied zwischen RGB und HSV?

RGB

RGB ist eine Abkürzung für Rot, Grün und Blau. Diese drei Farben werden als "drei Primärfarben des Lichts" bezeichnet und können mit braunen Röhren, Flüssigkristallmonitoren usw. verwendet werden. Es ist eine Methode zum Ausdrücken. Da für jede Primärfarbe 256 Dunkelheitsstufen eingestellt werden können, können 16.777.216 verschiedene Farben von 256 Würfeln ausgedrückt werden.

HSV

HSV ist eine Methode zum Ausdrücken von Farbe mit drei Elementen: Farbton, Sättigung und Wert / Helligkeit. ** Farbton **: Farbtonring (Farbtonring) Die Form des Rings oder angezeigt im Bereich von 0 bis 360 Grad ** Sättigung **: Grad der Lebendigkeit der Farbe: Je niedriger der Wert, desto niedriger die Sättigung und je höher der Wert, desto höher die Sättigung. ** Helligkeit **: Helligkeitsgrad der Farbe: Wenn der Wert niedrig ist, wird er dunkel, und wenn er hoch ist, wird er hell.

Bilder laden

Beachten Sie beim Laden von Bildern die folgenden Punkte.

1. Laden mit OpenvCV

import cv2

img = cv2.imread("sample.jpg ")

In diesem Fall ist img "BGR". Wenn Sie in "RGB" konvertieren möchten, können Sie es mit der folgenden Methode konvertieren.

img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

2. Laden mit Kissen

from PIL import Image

img = Image.open("sample.jpg ")

Beim Lesen mit Kissen kann es mit RGB gelesen werden.

Eine Funktion, die RGB und HSV durch Angabe eines Bildes zurückgibt

Implementierte eine Funktion, die ein Histogramm von R, G, B, H, S, V zurückgibt, wenn ein Bild in Python übergeben wird. Das Ergebnis der Ausführung mit jupyter wird ebenfalls veröffentlicht.


def show_img(path):

    img = cv2.imread(path)
    b, g, r = img[:,:,0], img[:,:,1], img[:,:,2]
    hist_b = cv2.calcHist([b],[0],None,[256],[0,256])
    hist_g = cv2.calcHist([g],[0],None,[256],[0,256])
    hist_r = cv2.calcHist([r],[0],None,[256],[0,256])
    plt.plot(hist_r, color='r', label="r")
    plt.plot(hist_g, color='g', label="g")
    plt.plot(hist_b, color='b', label="b")
    plt.legend()
    plt.show() 
    img2 = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    h, s, v = img2[:,:,0], img2[:,:,1], img2[:,:,2]
    hist_h = cv2.calcHist([h],[0],None,[256],[0,256])
    hist_s = cv2.calcHist([s],[0],None,[256],[0,256])
    hist_v = cv2.calcHist([v],[0],None,[256],[0,256])
    plt.plot(hist_h, color='r', label="h")
    plt.plot(hist_s, color='g', label="s")
    plt.plot(hist_v, color='b', label="v")
    plt.legend()
    plt.show()
    
    return hist_r,hist_g, hist_b, hist_h, hist_s, hist_v

Dieses Mal werde ich es mit dem folgenden Bild des Hundes versuchen. dog.jpeg

r,g,b,h,s,v = show_img("dog.jpeg ")

Screenshot from 2020-01-20 08-45-48.png

Über die Berechnung des Histogramms

OpenCV verwendet die folgenden Funktionen, um das Histogramm zu berechnen.

cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])

** Bilder **: Eingabebilder. Der Datentyp des Pixelwerts ist entweder uint8 oder float32. Verwenden Sie das Symbol [], um etwas wie "[img]" anzugeben. ** Kanäle **: Index des Kanals des Bildes, für den das Histogramm berechnet wird. Wenn das Eingabebild ein elegantes Bild ist, geben Sie [0] an. Geben Sie für Farbbilder einen der Werte [0], [1] und [2] an, die den Farbtönen von B, G und R entsprechen, für die das Histogramm berechnet wird. ** Maske **: Dies ist ein Maskenbild. Geben Sie "Keine" an, um das Histogramm aller Pixel im Bild zu berechnen. Um das Histogramm eines bestimmten Bereichs im Bild zu berechnen, geben Sie ein Maskenbild an, das den bestimmten Bereich darstellt (ein Beispiel ist unten dargestellt). ** histSize **: Die Anzahl der Fächer. Dieses Argument wird auch mit dem Symbol [] angegeben. Geben Sie [256] an, wenn Sie auf alle Pixelwerte abzielen möchten. ** Bereiche **: BEREICH, der den Bereich der Pixelwerte darstellt, für die Sie das Histogramm messen möchten. Normalerweise geben Sie [0,256] an.

Verweise

Recommended Posts

So erhalten Sie RGB- und HSV-Histogramme mit OpenCV
So installieren Sie OpenCV in Cloud9 und führen es in Python aus
So überprüfen Sie die Version von opencv mit Python
Verwendung ist und == in Python
So zeichnen Sie ein OpenCV-Bild mit Pygame
So erhalten Sie mit pandas DataFrame einen bestimmten Spaltennamen und Indexnamen
So ermitteln Sie mit Python den Unterschied zwischen Datum und Uhrzeit in Sekunden
So generieren Sie eine Sequenz in Python und C ++
So erhalten Sie Ergebnisse von id in Celery
So erhalten Sie Hilfe in einer interaktiven Shell
So erhalten Sie die Dateien im Ordner [Python]
Wie man Autokorrelation und partielle Autokorrelation mit Python zeichnet
So erhalten Sie den Variablennamen selbst in Python
Lassen Sie Keras 2.0 und OpenCV 3.2 in einer GPU-Umgebung arbeiten
So erhalten Sie mehrere Modellobjekte zufällig in Django
So definieren Sie Decorator und Decomaker mit einer Funktion
So führen Sie mit OpenCV ein Null-Padding in einer Zeile durch
So schleifen und spielen Sie ein GIF-Video mit openCV ab
Wie man Decorator in Django benutzt und wie man es macht
Wie man in Python entwickelt
Konvertieren Sie RGB und HSV mit PyTorch in teilbare Form
So entfernen Sie benutzerdefinierte Serverpiktogramme in message.content
[Go language] So erhalten Sie Terminaleingaben in Echtzeit
So tauschen Sie Elemente in einem Array in Python aus und wie kehren Sie ein Array um.
Ausländer sprechen: Wie man Klassen und Methoden auf Englisch benennt
Wie Sie pyenv und pyenv-virtualenv auf Ihre eigene Weise verwenden
Ich habe versucht "Wie man eine Methode in Python dekoriert"
Erstellen und Verwenden von statischen / dynamischen Bibliotheken in C-Sprache
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
So erhalten Sie eine Liste der integrierten Ausnahmen für Python
[Blender] Umgang mit Maus- und Tastaturereignissen in Blender-Skripten
[TF] Laden / Speichern von Modell und Parameter in Keras
Behandlung des HSV-Farbraums unten und oben in OpenCV
So erhalten Sie einen Überblick über Ihre Daten in Pandas
Ausführen externer Shell-Skripte und -Befehle in Python
So erstellen Sie einen Datenrahmen und spielen mit Elementen mit Pandas
[Shell] So erhalten Sie den Remote-Standardzweig mit Git
So melden Sie sich mit Python bei AtCoder an und senden automatisch
So aktualisieren Sie die App Store-Beschreibung in Google Spreadsheets und Fastlane automatisch
[Python] Wie man PCA mit Python macht
So erhalten Sie den NTP-Servernamen per DHCP und legen ihn fest
So vergleichen Sie Listen und rufen allgemeine Elemente in einer Liste ab
So installieren und verwenden Sie Tesseract-OCR
Verwendung von Klassen in Theano
Wie man nüchtern mit Pandas schreibt
So erhalten Sie alle möglichen Werte in einem regulären Ausdruck
So sammeln Sie Bilder in Python
Repeated @ app.callback in Dash So schreiben Sie Input und State ordentlich
So aktualisieren Sie Spyder in Anaconda
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
Verwendung von SQLite in Python
[Python] So erhalten Sie den ersten und den letzten Tag des Monats
Verwendung von Funktionen in separaten Dateien Perl-Version und Python-Version
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
So erhalten Sie eine Zeichenfolge aus einem Befehlszeilenargument in Python
So erhalten Sie die Python-Version
So installieren Sie OpenCV auf einem Mac
So konvertieren Sie 0,5 in 1056964608 auf einmal