openCV inRange Funktion lower/upper bound Problem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Cynob
User
Beiträge: 15
Registriert: Montag 11. Dezember 2017, 19:41

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:

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)
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:

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'])
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
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

Sind das denn *Zahlen*, oder nur *Strings*, die zufaellig Zahlen darstellen? Es ist ein himmelweiter Unterschied, ob man

Code: Alles auswählen

a = 1000
oder

Code: Alles auswählen

a = "1000"
schreibt.
Cynob
User
Beiträge: 15
Registriert: Montag 11. Dezember 2017, 19:41

Wenn ich jetzt:

Code: Alles auswählen

a = "1000"
b = int(a)
Schreibe müsste ich doch ne Zahl rausbekommen oder?
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja. Kannst du ja auch einfach ausprobieren, ob das einen Unterschied fuer dein Problem macht.
Cynob
User
Beiträge: 15
Registriert: Montag 11. Dezember 2017, 19:41

Hab ich ja schon alles.
Als Zahl direkt in den Code ( wie in den ganzen Beispielen im Netz) getippt funktionierts ja ohne Probleme. Nur wenn ich jetzt n String umwandel wills komischerweise nichtmehr. - ich komm nicht drauf warum....
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und ich habe nicht genug Informationen, um das anders zu beurteilen. Wenn die Werte aus der Konfiguration den gleichen Typ haben wie die die du uebergibst, dann kann und wird da nichts anderes bei rumkommen. Da gibt es kein magisches "diese Zahl war mal in einer Konfigurationsdatei, flipp mal aus". Folglich muessen es irgendwie andere Werte oder gar Typen sein, und da du kein reproduzierbares Beispiel zeigst, kann man das auch nicht tiefer beleuchten. Also entweder erzeugst du so eines, oder du lieferst mehr Informationen, wie zb print-Ausgaben nicht nur mit Werten, sondern auch typen, etc.
Antworten