2016-11-09 5 views
2

Ich versuche Koordinaten einer Kurve in einem Bild mit OpenCV in Python zu extrahieren. Ich brauche diese Koordinaten jedoch in einer Liste, so dass das erste Element dieser Liste ein Extremum der Kurve, das zweite Element der Punkt neben diesem Ende usw. ist, bis das letzte Element das andere Ende ist.Finden von Koordinaten der Kurve mit OpenCV (Python)

Say I, ein Bild des Buchstabens „C“ haben, eingeführt mit OpenCV als folgende numpy Array:

arr= 
[0,0,0,0,0,0,0 
    0,0,1,1,1,0,0 
    0,0,1,0,0,0,0  
    0,0,1,0,0,0,0 
    0,0,1,1,1,0,0 
    0,0,0,0,0,0,0] 

Dann würde ich eine Liste wie die Koordinaten der Bildpunkte in der folgenden Reihenfolge zurückkehr:

dh eine Liste (Koordinaten von Pixel "1" im Array, Koordinaten von Pixel "2", usw.).

Diese Idee von "Kontinuität" ist in findContours() etwas vorhanden, aber es funktioniert nicht sehr gut zum Finden einer Kontur eines solchen 1 Pixel breiten Objekts. Viele Pixel kommen zweimal in der erhaltenen Kontur (nicht zu sehr ein Problem), aber es kann auch nicht an einem Ende beginnen, und die Ausbeute Punktkoordinaten in einer Reihenfolge, wie

arr= 
[0,0,0,0,0,0,0 
    0,0,1,7,8,0,0 
    0,0,2,0,0,0,0  
    0,0,3,0,0,0,0 
    0,0,4,5,6,0,0 
    0,0,0,0,0,0,0] 

Dies ist, weil die Algorithmus geht im Grunde von 1 bis 6 als zurück bis 1, geht weiter bis 8 und geht zurück zu 1, um eine "Kontur" zu erhalten. Ich habe auch versucht, einfache Schwellwertbildung + numpy.nonzero, ist es natürlich, sie nicht bestellen, wie ich will, liefert es in der Reihenfolge

arr= 
[0,0,0,0,0,0,0 
    0,0,1,2,3,0,0 
    0,0,4,0,0,0,0  
    0,0,5,0,0,0,0 
    0,0,6,7,8,0,0 
    0,0,0,0,0,0,0] 

ich etwas Großes fehle? Ich bin nicht neu in Python oder Bildverarbeitung, aber ich habe gerade OpenCV gestartet.

Antwort

2

Ich weiß nicht über eine gute opencv-Implementierung dafür, aber Sie können Moore-Neighbor Tracing verwenden und modify es, damit wir den Wert des Punktes, den Sie in der Boudary gefunden haben, einen inkrementellen Wert festlegen.

+0

"Moore-Neighbor Tracing" sieht vielversprechend aus Ich habe es zu versuchen –

Verwandte Themen