[PYTHON] Behandlung des HSV-Farbraums unten und oben in OpenCV

Der Vorteil von HSV ist, dass Sie die Farbe mit Unter- und Oberfarbe auswählen können, aber ich hatte Schwierigkeiten, da die Unter- und Oberfarbe für die Farbe unbekannt sind. Machen Sie sich also eine Notiz.

Was ist HSV?

Es ist wie eine Erweiterung von RGB und besteht aus Farbton, Sättigung und Leichtigkeit. Was mich glücklich macht, ist, dass es einfach ist, die Farbpalette festzulegen. Der H-Teil entspricht dem RGB-Teil.

Farbton Typ 0-360 Bereich Sättigungsfarbe Lebendigkeit im Bereich von 0-100%. Helligkeit-Farbhelligkeit im Bereich von 0-100%.

Es scheint, dass der eingestellte Wert je nach Software unterschiedlich ist. Bei opencv liegt die Helligkeit meiner Meinung nach zwischen 100 und 255.

スクリーンショット 2017-07-05 21.53.25.png

Siehe Wiki https://ja.wikipedia.org/wiki/HSV%E8%89%B2%E7%A9%BA%E9%96%93

Simulator http://www.rapidtables.com/convert/color/hsv-to-rgb.htm

Konvertieren Sie von RGB nach unten, oben

convert.py


import sys
import numpy as np
import cv2
 
#rgb
red = sys.argv[1]
green = sys.argv[2]
blue = sys.argv[3]  
 
color = np.uint8([[[blue, green, red]]])
hsv_color = cv2.cvtColor(color, cv2.COLOR_BGR2HSV)
 
hue = hsv_color[0][0][0]
 
print("Lower bound is :"),
print("[" + str(hue-10) + ", 100, 100]\n")
 
print("Upper bound is :"),
print("[" + str(hue + 10) + ", 255, 255]")

python convert.py 255 255 255

Ich konvertiere es so, aber dieses kann nur grob konvertiert werden.

Debuggen Sie den HSV unten und oben

hsv.py


import cv2
import numpy as np

image_hsv = None   # global ;(
pixel = (20,60,80) # some stupid default

# mouse callback function
def pick_color(event,x,y,flags,param):
    if event == cv2.EVENT_LBUTTONDOWN:
        pixel = image_hsv[y,x]

        #you might want to adjust the ranges(+-10, etc):
        upper =  np.array([pixel[0] + 10, pixel[1] + 10, pixel[2] + 40])
        lower =  np.array([pixel[0] - 10, pixel[1] - 10, pixel[2] - 40])
        print(pixel, lower, upper)

        image_mask = cv2.inRange(image_hsv,lower,upper)
        cv2.imshow("mask",image_mask)

def main():
    import sys
    global image_hsv, pixel # so we can use it in mouse callback

    image_src = cv2.imread(sys.argv[1])  # pick.py my.png
    if image_src is None:
        print ("the image read is None............")
        return
    cv2.imshow("bgr",image_src)

    ## NEW ##
    cv2.namedWindow('hsv')
    cv2.setMouseCallback('hsv', pick_color)

    # now click into the hsv img , and look at values:
    image_hsv = cv2.cvtColor(image_src,cv2.COLOR_BGR2HSV)
    cv2.imshow("hsv",image_hsv)

    cv2.waitKey(0)
    cv2.destroyAllWindows()

if __name__=='__main__':
    main()
python hsv.py hoge.png

Es wird beim Start maskiert und auf dem hsv-Bildschirm doppelklickt. Zum Beispiel sind Gelb und Grün sehr ähnlich. Pink und Rot auch. In diesem Fall reagiert auch Rot, obwohl Sie auf Pink klicken. Mit anderen Worten, Sie müssen die Farbtiefe und Helligkeit fein einstellen. Ich wusste nicht, wie ich es automatisch machen sollte, also spielte ich manuell damit.

Stellen Sie den HSV manuell ein.

hsv_sample.py


import sys
import cv2
import numpy as np

import sys
import cv2
import numpy as np
#yellow
# lower =  np.array([30,100,250])
# upper =  np.array([40,255,255])
#pink
lower =  np.array([160,50,50])
upper =  np.array([180,255,255])
#yellowgreen
# lower =  np.array([30,100,200])
# upper =  np.array([60,255,250])

image_src = cv2.imread(sys.argv[1])
image_src = cv2.cvtColor(image_src,cv2.COLOR_BGR2HSV)
image_src = cv2.inRange(image_src,lower,upper)

while True:
    cv2.imshow("image_src",image_src)

    if cv2.waitKey(10) == 27: # ESC
        break

Eine sehr primitive Methode, aber auch eine gelbgrüne Maske, die Gelb sehr ähnlich ist, hat funktioniert.

Ich habe es aber nicht getan. .. ..

Aus diesem Grund war es möglicherweise möglich, es zu automatisieren, indem es angezeigt und der Chot-Bereich angegeben wurde.

python


>>> green = np.uint8([[[0,255,0 ]]])
>>> hsv_green = cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
>>> print( hsv_green )
[[[ 60 255 255]]]

Referenz

How to define the “lower” and “upper” range of a color? http://answers.opencv.org/question/134248/how-to-define-the-lower-and-upper-range-of-a-color/ http://docs.opencv.org/trunk/df/d9d/tutorial_py_colorspaces.html

Recommended Posts

Behandlung des HSV-Farbraums unten und oben in OpenCV
So erhalten Sie RGB- und HSV-Histogramme mit OpenCV
Python-Implementierung des CSS3-Mischmodus und Diskussion über den Farbraum
Umgang mit Zitaten in [bash]
Umgebungskonstruktion von Python und OpenCV
Umgang mit JSON-Dateien in Python
Öffnen Sie eine Excel-Datei in Python und färben Sie die Karte von Japan
Implementierung des Partikelfilters durch Python und Anwendung auf das Zustandsraummodell
Python: Vorverarbeitung beim maschinellen Lernen: Umgang mit fehlenden / Ausreißern / unausgeglichenen Daten
Umgang mit Zeichencodes von Dateien in IronPython
Screenshots des Webfischens mit Selen und Chrom.
Trennung von Design und Daten in matplotlib
Zusammenfassung der Module und Klassen in Python-TensorFlow2-
Modulimport und Ausnahmebehandlung in Python
Projekt Euler # 1 "Vielfaches von 3 und 5" in Python
Extrahieren Sie die Farbe des Objekts im Bild mit Mask R-CNN und K-Means Clustering