2016-03-18 3 views
0

Ich versuche, eine Ampel aus der Kamera-Feed meines autonomen Roboters herauszufiltern. Ich konvertiere die aufgenommenen Bilder in den HSV - Farbraum, schwenke sie, bis ich alle roten Objekte erkennen kann, die ungefähr so ​​"rot" wie die Ampel sind, dann wende ich Hough - Transformation an, um das rote Licht unter ihnen herauszufinden (was offensichtlich ein Kreis).Konvertieren von HSV in Graustufen für die Anwendung von Hough-Transformation

Jetzt hier das Problem ist, dass ich, dass Hough arbeitet Transformation fand nur mit Einkanal Bildern, und ich scheine mit drei zu arbeiten, so dass ich versuchte Umwandlung des HSV Bild Schwellwertbildung der folgenden Code-

imgFinal = thresholded #initialising the variable with the thresholded image. 
framenew = cv2.cvtColor(threshNew, cv2.COLOR_HSV2GRAY) 
auf Graustufen unter Verwendung von

Allerdings bekomme ich während der Laufzeit eine Fehlermeldung, dass 'Modul' Objekt hat kein Attribut 'COLOR_HSV2GRAY'. Ich habe einige Fragen zu diesem Thema gefunden, aber keine war die Antwort auf mein Problem. Ich muss nur die rote Ampel erkennen, ich habe versucht, die Kanäle zu trennen, aber ich habe keine Ahnung, wie ich mit diesem Ansatz verfahren soll. Ich bin auch offen für andere Ansätze.
Danke!

P.- Dies könnte ein Thema sein, aber welche Sprache schlagen Sie für dieses Projekt vor? C++ oder Python? Ich habe den Code für beide geschrieben, ich bin nur verwirrt, welche zu verwenden. Ich entwickle es gerade auf meinem Windows 8.1 PC, aber es muss auf dem Raspberry Pi 3 für das endgültige Projekt laufen.

+0

In der Regel verwenden Sie nur den V-Kanal als Graustufenbild, afaik. – Micka

+0

Sie sagen, Sie sind unsicher, wie Sie die Kanäle aufteilen? Wenn ja, schau dir das an: http://stackoverflow.com/questions/6699374/access-to-each-separate-channel-in-opencv. Ich würde Python verwenden, wenn es schnell genug ist ... – IanB

+0

@IanB Das ist in C++ und sollte mit meinem Code funktionieren (ich kann es jetzt nicht testen). Aber die Variablen zum Speichern von Kanälen werden als Matrizen deklariert, wie mache ich das in Python? Ich habe geplant, den Code für beide Sprachen zu schreiben und durch das Experiment zu finden, das besser funktioniert. –

Antwort

1

Der V-Kanal des HSV ist so etwas wie ein Graustufenbild, aber es ist nicht identisch mit einem BGR2GRAY Grascale-Bild.

Dieses ein Graustufenbild von BGR2GRAY berechnet:

enter image description here

während dies der V-Kanal des Bildes HSV ist:

enter image description here

Wenn Sie etwas "besser" benötigen, Sie können Ihr HSV-Bild immer wieder in BGR konvertieren und das BGR mit openCV-Codes in GRAY umwandeln.

+0

Ich brauche nicht unbedingt ein Graustufenbild, ich brauche nur eine Form meines HSV-Bildes, so dass es mit der Hough-Transformation verwendet werden kann. Ich werde versuchen, den HSV in BGR und dann in Graustufen konvertieren und zurückschreiben. –

+0

Hallo! Ich habe versucht, das Bild von HSV zu BGR zu konvertieren. Es hat keinen Fehler während der Kompilierung, aber wenn ich es ausführe hängt meine Lösung (Code in C++, erstellt in Visual Studio Express 2012 für Windows Desktop) –

+0

können Sie Ihre Eingabe Bild und Ihren Code, wie Sie in HSV konvertiert und wie Sie versucht zu konvertieren zur BGR? – Micka

Verwandte Themen