openCV inRange Funktion lower/upper bound Problem
Verfasst: Sonntag 2. August 2020, 10:13
Hallo,
Ich versuche mich zur Zeit mit openCV Konturen zu erkennen. Jetzt hab ich ein Problem wo ich selber nichtmehr weiterkomme und im Netz auch nicht wirklich was hilfreiches finden konnte.
Und zwar wandel ich ein Bild in den HSV Farbraum um und möchte dann .inRange drauf anwenden. Eigentlich so wie in dem Beispiel dort: https://docs.opencv.org/3.4/da/d97/tuto ... Range.html
Mein Code sieht so aus:
So funktioniert das ganze auch wunderbar. Jetzt möchte ich aber die zwei Arrays lower/upperBound mit gespeicherten Daten füttern. Um in meinem Codegedöns die Einstellungen zu sichern und einzulesen verwende ich den "configparser". Ich lade über den jeden Wert einzeln mit:
So jetzt hab ich das Problem das egal wie ich die Werte caste, in ein Array verpacke oder direkt in das cv2.inRange einfüge sich der Code schlicht aufhängt. Es kommt keine Fehlermeldung - es läuft einfach nicht.
Setz ich wieder nur die Zahlen/Variablen (lowerBound = (0, 0, 13) / upperBound = (156, 177, 255) direkt im Code läuft es wunderbar. Das einlesen der Zahlen aus der config funktioniert auch - also ich kann sie mir nach dem einlesen mit print() ausgeben lassen.
Ich war der Meinung das wenn ich den Wert der lowbnd_h/s/v_raw in int/np.uint8/np.float32 caste und die in ein Array reinsteck das dies von cv2.inRange angenommen werden sollte. Ich hab da jetzt ewig rum probiert und komm zu keiner Lösung. Das ganze mach ich übrigens auf nem Raspberry Pi mit openCV 3.4
Also ich bin für jede Hilfe Dankbar!
Viele Grüße
Cynob
Ich versuche mich zur Zeit mit openCV Konturen zu erkennen. Jetzt hab ich ein Problem wo ich selber nichtmehr weiterkomme und im Netz auch nicht wirklich was hilfreiches finden konnte.
Und zwar wandel ich ein Bild in den HSV Farbraum um und möchte dann .inRange drauf anwenden. Eigentlich so wie in dem Beispiel dort: https://docs.opencv.org/3.4/da/d97/tuto ... Range.html
Mein Code sieht so aus:
Code: Alles auswählen
lowerBound = (0, 0, 13)
upperBound = (156, 177, 255)
...
hsv = cv2.cvtColor(rawframe, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, lowerBound, upperBound)
Code: Alles auswählen
lowbnd_h_raw = (ConfigSectionMap("workingArea")['hsv_lowerbound_h'])
lowbnd_s_raw = (ConfigSectionMap("workingArea")['hsv_lowerbound_s'])
lowbnd_v_raw = (ConfigSectionMap("workingArea")['hsv_lowerbound_v'])
Setz ich wieder nur die Zahlen/Variablen (lowerBound = (0, 0, 13) / upperBound = (156, 177, 255) direkt im Code läuft es wunderbar. Das einlesen der Zahlen aus der config funktioniert auch - also ich kann sie mir nach dem einlesen mit print() ausgeben lassen.
Ich war der Meinung das wenn ich den Wert der lowbnd_h/s/v_raw in int/np.uint8/np.float32 caste und die in ein Array reinsteck das dies von cv2.inRange angenommen werden sollte. Ich hab da jetzt ewig rum probiert und komm zu keiner Lösung. Das ganze mach ich übrigens auf nem Raspberry Pi mit openCV 3.4
Also ich bin für jede Hilfe Dankbar!
Viele Grüße
Cynob