OpenCV Linien / Linealerkennung

9

Ich versuche, das Lineal auf dem Bild zu erkennen und folge dem nächsten Prozess:

1) Bild vorbereiten (Unschärfe, Canny, ect.)

2) Linien erkennen

3) Reihe von parallelen Linien vorbereiten

Also, ich habe ein Bild:

Diese App konvertiert zu diesem:

weiter Ich habe versucht, HoughLinesP Methode und sieht ich kann es nicht in meinem Fall anwenden, weil ich nicht den Winkel der Linien kennen, so ist es Lineal vertikale Linien nicht gefunden, aber horizontal gefunden (zum Beispiel) und jede Lineallinie besteht aus vielen dünnen Linien, die ein Problem darstellen werden:

der Code:

%Vor%

Ich habe auch LineSegmentDetector ausprobiert, und ich habe mehr erwartet, was ich erwartet habe:

code:

%Vor%

Aber hier sah ich mich mit einigen Problemen konfrontiert (und sieht, dass es keine Möglichkeit gibt, createLineSegmentDetector anzupassen) :  Nicht alle Linien wurden erkannt, die Linien werden nicht in der Mitte, sondern an den Seiten und manchmal nur auf der linken oder rechten Seite erkannt, aber ich muss den Mittelpunkt der fetten Linie erhalten, da dies in den Berechnungen als nächstes verwendet wird.

Also, was ist der richtige Weg, um alle Linien (und jede Linie nur einmal in der Mitte der fetten Linie) zu finden?

Aktualisieren

versucht HoughLines auch:

Vektorlinien;

%Vor%

aber das Ergebnis sieht auch seltsam aus (und Berechnungen brauchen viel Zeit) :

    
user5599807 10.02.2017, 14:50
quelle

1 Antwort

4

Ich denke, ich finde den Weg, dem ich folgen sollte:

1) Linien so dünn wie möglich machen (nach der Canny-Transformation) :

%Vor%

sieht so aus:

2) Linien mit LineSigmentDetector erkennen:

%Vor%

3) Berechne Linienwinkel und Gruppennummern nach Winkel:

%Vor%

4) habe die Lineallinie gefunden und gezeichnet:

%Vor%

Ergebnis habe ich:

Aktualisieren

Aber wenn wir dieses Bild gut zoomen, sehen Sie immer noch doppelte Zeilen Um Duplikate zu entfernen, habe ich eine einfache Logik erstellt, bei der die Linien durch Mittelwertbildung für jeden Punkt verschmolzen werden, zum Beispiel im Fall von 3 Zeilen (grün) haben wir 3 Punkte am Ende:

    
user5599807 13.02.2017, 20:08
quelle