Frage

Ich habe ein Beispielbild zum besseren Verständnis hochgeladen: http://www.imagebanana.com/view/kaja46ko/test.jpg

Im Bild sehen Sie einige Scanlines und einen Marker (der weiße Retangle mit dem Kreis darin). Ich möchte, dass OpenCV einen bestimmten Bereich entlang des Beispiels (in dem beispielsweise umrissenen Über -die -Scanlines), der etwa 5x5 liegen sollte. Wenn dieser Bereich einen Verlauf von Schwarz bis Weiß enthält, möchte ich, dass OpenCV die Position dieses Bereichs rettet, damit ich später damit arbeiten kann.

Das Endergebnis wäre die Unterscheidung zwischen dem Marker und den anderen Retischen, die von Schwarzweig und weißer Linien getrennt sind.

Ist so etwas möglich? Ich habe viel gegoogelt, aber ich habe nur Kantendetektoren gefunden, aber das ist nicht, was ich will, ich brauche wirklich nur die Erkennung des Schwarz -zu -Weiß -Gradienten.

Danke im Voraus.

War es hilfreich?

Lösung 2

Vielen Dank für Ihren antwortenden DNUL, aber es hat mir nicht wirklich geholfen, das zu arbeiten. Ich bin ein Histogramm, um sich dem Problem zu nähern, aber es ist nicht ganz das, was ich will.

Ich habe dieses Problem gelöst, indem ich eine 40x40 -Matrix erstellt habe, die 5x5 Matrix enthält, die die Rohpixeldaten in allen 3 Kanälen enthalten. Ich habe jeden 40px-Bereich iteriert und in der Iterröge an jedem Rand der 5px-Fläche iteriert. Ich habe jedes Pixel überprüft und diejenigen gespeichert, die dunkler sind, als ein bestimmter Schwellenwert ein Speicher.

Nach der Iteration hatte ich eine grobe Vorstellung davon, wie viele schwarze Pixel sie sind, also habe ich jeden von ihnen in allen 3 Kanälen nach Nachbarn mit weißen Pixeln überprüft. Ich markierte dann jedes dieser Pixel und speicherte sie auf einen anderen Speicher.

Ich benutzte dann den RANSAC -Algorithmus, um Linien aus diesen Punkten heraus zu konstruieren. Es konstruiert etwa 5-20 Zeilen pro Markierungskante. Ich schaute dann auf die Linien, die sich treffen, und retteten die Position derjenigen, die sich in einem quadratischen Winkel treffen. Die 4 Punkte, die ich davon bekomme, sind die Kanten des Markers.

Wenn Sie dies reproduzieren möchten, müssten Sie das Bild im Voraus filtern und eine Schwelle anwenden, um die Unterscheidung zwischen Schwarz -Weiß -Pixeln zu erleichtern.

Ein Beispielbild, speichern Sie, nachdem Sie die Punkte gefunden haben und bevor Sie die Zeilen konstruieren:http://www.imagebanana.com/view/i6gfe6qi/9.jpg

Andere Tipps

Es wäre eine gute Idee, einige der Bereiche durch Berechnung ihres Histogramms herauszufiltern. Sie können Cvcalchist für die Aufgabe verwenden, dann können Sie einen Schwellenwert festlegen, um festzustellen, ob der Prozentsatz der schwarz-weißen Pixel dem eines Gradienten entspricht. Dies wird die Aufgabe nicht lösen, aber es wird Ihnen helfen, die Komplexität zu verringern.

Dann können Sie das Bild untergraben, um alle weißen Bereiche zusammenzuführen. Nach dem Auftragen von Schwellenwert wäre es möglich, verbundene Komponenten (unter Verwendung von CVFindContours) zu finden, die Bilder in schwarzen Zonen oder weißen Zonen trennen. Sie können dann Gradienten erkennen, indem Sie 5x5 Bereiche finden, die gleichzeitig ein Stück einer weißen Zone und schwarze Zone enthalten.

ich hoffe es hilft.

Was Sie beschreiben ist Kantenerkennung. Genau so funktioniert der Canny Edge -Detektor. Es sucht nach dunklen Pixeln in der Nähe von hellen Pixeln und basierend auf einer Schwelle, die Sie eingeben (es gibt auch die adaptive Canny, die die Schwelle für Sie herausfindet) und sie auf alle schwarzen oder alle weißen setzt (auch bekannt ).

Siehe hier:http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top