Ich habe ein Bild von einer Kaffeedose mit einer orangefarbenen Deckelposition, die ich finden möchte. Hier ist es .
Das Dienstprogramm gcolor2 zeigt HSV in der Mitte des Deckels als (22, 59, 100) an. Die Frage ist, wie man dann die Grenzen der Farbe wählt. Ich habe versucht, min = (18, 40, 90) und max = (27, 255, 255), aber unerwartet
Hier ist der Python-Code:
import cv
in_image = 'kaffee.png'
out_image = 'kaffee_out.png'
out_image_thr = 'kaffee_thr.png'
ORANGE_MIN = cv.Scalar(18, 40, 90)
ORANGE_MAX = cv.Scalar(27, 255, 255)
COLOR_MIN = ORANGE_MIN
COLOR_MAX = ORANGE_MAX
def test1():
frame = cv.LoadImage(in_image)
frameHSV = cv.CreateImage(cv.GetSize(frame), 8, 3)
cv.CvtColor(frame, frameHSV, cv.CV_RGB2HSV)
frame_threshed = cv.CreateImage(cv.GetSize(frameHSV), 8, 1)
cv.InRangeS(frameHSV, COLOR_MIN, COLOR_MAX, frame_threshed)
cv.SaveImage(out_image_thr, frame_threshed)
if __name__ == '__main__':
test1()
opencv
hsv
color-detection
Student FourK
quelle
quelle
Antworten:
Problem 1: Unterschiedliche Anwendungen verwenden unterschiedliche Maßstäbe für den HSV. Zum Beispiel Gimp verwendet
H = 0-360, S = 0-100 and V = 0-100
. Aber OpenCV verwendetH: 0-179, S: 0-255, V: 0-255
. Hier habe ich einen Farbtonwert von 22 in Gimp. Also nahm ich die Hälfte davon, 11, und definierte den Bereich dafür. dh(5,50,50) - (15,255,255)
.Problem 2: Außerdem verwendet OpenCV das BGR-Format, nicht RGB. Ändern Sie also Ihren Code, der RGB in HSV konvertiert, wie folgt:
Führen Sie es jetzt aus. Ich habe eine Ausgabe wie folgt erhalten:
Hoffe das ist was du wolltest. Es gibt einige falsche Erkennungen, aber sie sind klein, sodass Sie die größte Kontur wählen können, die Ihr Deckel ist.
BEARBEITEN:
Wie Karl Philip in seinem Kommentar sagte, wäre es gut, neuen Code hinzuzufügen. Es ändert sich jedoch nur eine einzige Zeile. Daher möchte ich denselben Code hinzufügen, der in einem neuen
cv2
Modul implementiert ist , damit Benutzer die Einfachheit und Flexibilität eines neuencv2
Moduls vergleichen können.Es ergibt sich das gleiche Ergebnis wie oben. Code ist jedoch viel einfacher.
quelle
cv2
Schnittstelle zu wechseln . Es ist einfacher und schneller. Einige gute Tutorials finden Sie hier: opencvpython.blogspot.com. Und wenn es Ihr Problem löst, akzeptieren Sie die Antwort und schließen Sie diese Sitzung.Ok, Farbe im
HSV
Raum zu finden ist eine alte, aber häufige Frage. Ich habe einehsv-colormap
zu schnelle Suche nach Sonderfarben gemacht. Hier ist es:Die x-Achse repräsentiert
Hue
in [0,180], die y-Achse1 repräsentiertSaturation
in [0,255], die y-Achse2 repräsentiertS = 255
, während behaltenV = 255
.Um eine Farbe zu finden, suchen Sie normalerweise nur nach dem Bereich von
H
undS
und setzen Sie v im Bereich (20, 255).Um die orange Farbe zu finden, suchen wir nach der Karte und finden den besten Bereich :
H :[10, 25], S: [100, 255], and V: [20, 255]
. So ist die Maskecv2.inRange(hsv,(10, 100, 20), (25, 255, 255) )
Dann verwenden wir den gefundenen Bereich, um nach der orange Farbe zu suchen. Dies ist das Ergebnis:
Die Methode ist einfach, aber häufig anzuwenden:
Ähnliche Antworten:
quelle
Ich habe dieses einfache Programm erstellt, um HSV-Codes in Echtzeit abzurufen
quelle
Hier ist ein einfaches HSV-Farb-Thresholder-Skript zum Bestimmen der unteren / oberen Farbbereiche mithilfe von Spurleisten für jedes Bild auf der Festplatte. Ändern Sie einfach den Bildpfad in
cv2.imread()
quelle
Der OpenCV-HSV-Bereich beträgt: H: 0 bis 179 S: 0 bis 255 V: 0 bis 255
Bei Gimp (oder anderen Fotomanipulations-Sw) liegt der Farbton zwischen 0 und 360, da opencv Farbinformationen in ein einzelnes Byte einfügt. Der maximale Zahlenwert in einem einzelnen Byte beträgt 255, daher entsprechen openCV-Farbtonwerte den Farbtonwerten von gimp geteilt durch 2 .
Beim Versuch, eine Objekterkennung basierend auf dem HSV-Farbraum durchzuführen, stellte ich fest, dass ein Bereich von 5 (OpenCV-Bereich) ausreichte, um eine bestimmte Farbe herauszufiltern. Ich würde Ihnen raten, einen HSV-Farbgaumen zu verwenden, um herauszufinden, welcher Bereich für Ihre Anwendung am besten geeignet ist.
quelle
Versuchen Sie die folgenden Befehle im Python-Terminal, um den HSV-Wert von Grün zu ermitteln
quelle