Die Farbextraktion mit Python + OpenCV löste das Rätsel des grünen Hintergrunds

Zweck

150226-143939-screen-shot.jpg

Es tut mir leid für das plötzliche Bild von Onkel Musai.

Ich versuchte: "Kann ich jede der vier farbigen Holzkugeln aus Rot, Gelb, Blau und Grün extrahieren?"

Sowohl die Python-Geschichte als auch die OpenCV-Geschichte dauern ungefähr einen Monat. Bitte weisen Sie (wirklich) auf meine schlechten Punkte hin.

Filtercode

Das Folgende ist

  1. Hellen Sie die Pixel (hTarget) des angegebenen Farbtons ( hue) auf.
  2. Graustufen des nicht zutreffenden Pixels (hMask2)

Der Code.

filters.py


...

def hueMask(src, dst, hue, hueRange):
    src = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
    h, s, v = cv2.split(src)
    hOrg = h.copy()
    hTarget = h.copy()

    cv2.threshold(hTarget, hue + hueRange, hue, cv2.THRESH_TOZERO_INV, hTarget)
    # 「src(x,y)Wenn größer als der Schwellenwert ist, dst(x,y)ist 0 "

    # 0
    # 0
    # 0
    # thresh
    # src
    # src
    # src
    # src
    # src

    cv2.threshold(hTarget, hue - hueRange, hue, cv2.THRESH_BINARY, hTarget)
    # 「src(x,y)Wenn kleiner als der Schwellenwert ist, dst(x,y)ist 0 "

    # 0(src)
    # 0(src)
    # 0(src)
    # src
    # src
    # thresh
    # 0
    # 0
    # 0

    #Ergebnis

    # 0
    # 0
    # 0
    # thresh
    # src
    # thresh
    # 0
    # 0
    # 0

    #Um fluoreszierendes Licht (gelb) und Haare (blau) auszuschließen
    #Schließen Sie extrem entsättigte Pixel aus dem Zielbereich aus
    sNotVeryLow = s.copy() #Wo die Sättigung nicht extrem niedrig ist
    #Wenn die Sättigung höher als 31 ist, legen Sie sie in den Zielbereich (255).
    #Ansonsten der Nichtzielbereich (0).
    cv2.threshold(sNotVeryLow, 31, 255, cv2.THRESH_BINARY, sNotVeryLow)

    #Das logische Produkt von hTarget und vNotHighlight ist das neue hTarget
    cv2.bitwise_and(hTarget, vNotVeryLow, hTarget)

    #Erstellen Sie eine Kopie des Helligkeitsbildes.
    vBrightened = v.copy()
    #und dazu+Wenden Sie eine 96-Gammakorrektur an, um es heller zu machen
    cv2.addWeighted(v, 0.625, v, 0.0, 96, vBrightened)
    #Fügen Sie ein gammakorrigiertes Helligkeitsbild nur im Zielbereich des Helligkeitsbildes ein
    cv2.bitwise_and(vBrightened, 255, v, hTarget)

    hMask2 = h.copy()
    #Wenn das entsprechende Pixel von hTarget (1-Kanal-Bild) 0 ist
    #Stellen Sie das entsprechende Pixel von hMask2 (1-Kanal-Bild) auf 255 ein.
    #Andernfalls setzen Sie es auf 0.
    #Kurz gesagt, hMask2 ist eine invertierte Version des hTarget-Maskenbilds.
    cv2.compare(hTarget, 0, cv2.CMP_EQ, hMask2)

    cv2.bitwise_and(s, 0, s, hMask2) #Logisches UND

    cv2.merge((hOrg, s, v), src)
    cv2.cvtColor(src, cv2.COLOR_HSV2BGR, dst)

...

Irgendwie ist der Name der Variablen schmutzig, aber ... Jetzt können Sie jeden Farbton extrahieren.

Anwendungscode

Versuchen Sie als Nächstes, vier Farben zu extrahieren, dh die Farbtöne Rot, Gelb, Blau und Grün.

App.py


...
class App(object):
    def __init__(self):
        ...
        self._shouldHueMask                = False
        ...
    def run(self):
        ...
        while self._windowManager.isWindowCreated:
            ...
            if self._shouldHueMask:
                filters.hueMask(frame, frame, self._hue, self._hueRange)
            ...
    def onKeypress(self, keycode):
        ...
        elif keycode == ord('B'): #Blau
            self._hue      = 110
            self._hueRange = 10
            self._shouldHueMask = \
                not self._shouldHueMask
        elif keycode == ord('G'): #Grün
            self._hue      = 70
            self._hueRange = 25
            self._shouldHueMask = \
                not self._shouldHueMask
        elif keycode == ord('R'): #rot
            self._hue      = 5
            self._hueRange = 5
            self._shouldHueMask = \
                not self._shouldHueMask
        elif keycode == ord('Y'): #Gelb
            self._hue      = 30
            self._hueRange = 15
            self._shouldHueMask = \
                not self._shouldHueMask
        ...
if __name__=="__main__":
    App().run()

Der Farbtonwert und die Breite von Rot, Gelb, Blau und Grün wurden nach Versuch und Irrtum festgelegt.

Ergebnis

rot

150226-144313-screen-shot.jpg

Nun, es scheint, dass die Hautfarbe auf die "rote Extraktion" reagiert hat. Damit ist es nicht möglich, die Holzkugel "nur" herauszuziehen.

Gelb

150226-144702-screen-shot.jpg

Nun, diesmal hat die Decke auf die "gelbe Extraktion" reagiert.

Blau

150226-144944-screen-shot.jpg

Diesmal haben die Haare und der schwarze Pullover auf die "blaue Extraktion" reagiert.

Grün

150226-145207-screen-shot.jpg

Ich konnte die Holzkugeln am schönsten extrahieren.

Wenn Sie Bilder synthetisieren, stehen Sie vor einem grünen Tuch, das als grüner Hintergrund bezeichnet wird. Es gibt einen Grund, warum es grün war.

Der Grund, warum Grün beruhigend ist, kann sein, dass sich die Augen mit neuen Reizen wohl fühlen, im Gegensatz zu den Farben, die im Alltag auftreten.

Vielleicht ist die Tafel deshalb grün?

Ich werde den Pinsel darauf legen und Raum für Diskussionen lassen.


Ich blogge: Weed.nagoya

Recommended Posts

Die Farbextraktion mit Python + OpenCV löste das Rätsel des grünen Hintergrunds
Füllen Sie den Hintergrund mit einer einzigen Farbe mit OpenCV2 + Python
2016 Todai Mathematik mit Python gelöst
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Schätzen Sie die Haltung des AR-Markers mit Python + OpenCV + Drohne
Grundlegendes Studium von OpenCV mit Python
Überprüfen Sie die Existenz der Datei mit Python
So schneiden Sie den unteren rechten Teil des Bildes mit Python OpenCV
Erhalten und schätzen Sie die Form des Kopfes mit Dlib und OpenCV mit Python
Versuchen Sie, den Hintergrund und das sich bewegende Objekt des Videos mit OpenCV zu trennen
Ich habe versucht, das Bild mit Python + OpenCV zu "glätten"
Leistungsvergleich des Gesichtsdetektors mit Python + OpenCV
Kantenextraktion mit Python + OpenCV (Sobel-Filter, Laplace-Filter)
[Hinweis] Exportieren Sie das HTML der Site mit Python.
Berechnen Sie die Gesamtzahl der Kombinationen mit Python
Überprüfen Sie das Datum der Flaggenpflicht mit Python
Ich habe versucht, das Bild mit Python + OpenCV zu "binarisieren"
Der einfachste Weg, OpenCV mit Python zu verwenden
Konvertieren Sie den Zeichencode der Datei mit Python3
[Python] Bestimmen Sie den Typ der Iris mit SVM
[Python + OpenCV] Malen Sie den transparenten Teil des Bildes weiß
Extrahieren Sie die Tabelle der Bilddateien mit OneDrive & Python
Lerne Nim mit Python (ab Anfang des Jahres).
Binarisierung mit OpenCV / Python
Zerstören Sie den Zwischenausdruck der Sweep-Methode mit Python
[OpenCV / Python] Ich habe versucht, Bilder mit OpenCV zu analysieren
[Python] Ändern Sie die Textfarbe und Hintergrundfarbe eines bestimmten Schlüsselworts in der Druckausgabe
Versuchen Sie, die Bildkonvertierung mit OpenCV mit Python zu projizieren
der Zen von Python
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Berechnen Sie den Regressionskoeffizienten der einfachen Regressionsanalyse mit Python
Schreiben Sie mit OpenCV-Python Zeichen in die Kartenillustration
Zusammenfassung des grundlegenden Ablaufs des maschinellen Lernens mit Python
[Python] Zusammenfassung, wie die Farbe der Figur angegeben wird
Holen Sie sich mit Python den Betriebsstatus von JR West
[Windows] [Python] Kamerakalibrierung des Fischaugenobjektivs mit OpenCV
Visualisieren Sie mit OpenCV den Wertschätzungsstatus von Kunstwerken
Python Hinweis: Das Rätsel, einer Variablen eine Variable zuzuweisen
Ich habe versucht, das Bild mit Python + OpenCV "morphologisch zu konvertieren"
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Die Geschichte der Implementierung des Themas Facebook Messenger Bot mit Python
Vereinheitlichen Sie die Umgebung des Python-Entwicklungsteams, beginnend mit Poetry
Visualisieren Sie die Ergebnisse von Entscheidungsbäumen, die mit Python scikit-learn erstellt wurden
Berechnen Sie mit Python Millionen von Stellen in der Quadratwurzel von 2
Ich habe die grundlegende Grammatik von Python in Jupyter Lab geschrieben
Führen Sie die Intelligenz Ihrer eigenen Python-Bibliothek mit VScode aus.
Ich habe die Strategie des Aktiensystemhandels mit Python evaluiert.
Berühren wir die API der Netatmo Weather Station mit Python. #Python #Netatmo
Erkennen Sie mit Python Objekte einer bestimmten Farbe und Größe
Die Geschichte der Anzeige von Bildern mit OpenCV oder PIL (nur)
Die Geschichte eines Rubinisten, der mit Python :: Dict-Daten mit Pycall kämpft
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
Versuchen Sie, den Betrieb von Netzwerkgeräten mit Python zu automatisieren
Schreiben Sie den Datensatzadditionsknoten von SPSS Modeler mit Python neu.
Spielen Sie mit dem Passwortmechanismus von GitHub Webhook und Python
[Python] Mit OpenCV können Sie problemlos Bilddateien mit Seriennummern lesen