2012-06-13 3 views
5

Gibt es opencv-Funktion wie "cvHoughCircles()", die für die Quadrat-Erkennung Programmierung für Kreis-Erkennung Programm verwenden kann, die ist CvSeq * Kreise = cvHoughCircles(), aber ich konnte nicht für die quadratische Erkennung finden.Gibt es irgendeine opencv Funktion wie "cvHoughCircles()" für die quadratische Erkennung?

+2

Da Quadrate wesentlich einfacher als Kreise Detektieren Detektieren, würde ich nicht überrascht, wenn squarefinding als eine Übung zu dem Coder gelassen wurde. Sie müssen im Wesentlichen lange kollinear verbundene Segmente finden, die sich im rechten Winkel schneiden, und Sie können diese Segmente mit ein wenig Filterung und einem Kantendetektor erzeugen. Die meisten Tools, die Sie dafür benötigen, sollten bereits in OpenCV sein. – Rook

+0

Und dazu verwenden Sie Hough-Transformation für Linien, die auch in OpenCV implementiert ist;) – CTZStef

+0

Siehe hierzu: http://stackoverflow.com/questions/10533233/opencv-c-obj-c-advanced-square- Erkennung Es gibt drei oder vier Ansätze, die Sie unter diesem Link ausprobieren könnten. Viel Spaß :) – ChathuraSam

Antwort

8

Sie benötigen keine separate Funktion dafür. OpenCV kommt mit einem quadratischen Erkennungsbeispiel (das tatsächlich Rechtecke erkennt, Sie können eine Einschränkung hinzufügen, dass alle Seiten gleich lang sein sollten, um ein Quadrat zu erhalten).

prüfen Sie diesen Link: squares.cpp

Es gibt eine gute Erklärung, wie dieser Code funktioniert in diesem SOF: How to identify square or rectangle with variable lengths and width by using javacv?

Unten ist das Ergebnis erhalten Sie, wenn Sie diesen Code anzuwenden.

enter image description here

+0

bt, wenn ich versuche, Programm zu starten, das zeigt 2 Fehler wegen ** # include "opencv2/core/core.hpp" ** und ** # include "opencv2/imgproc/imgproc.hpp" ** ///// Fehler- \t fataler Fehler C1083: Kann nicht öffnen Include-Datei: 'opencv2/core/core.hpp': Keine solche Datei oder Verzeichnis.Können Sie mir bitte die Art und Weise, um diesen Fehler zu lösen – Thar1988

+0

Es tut mir leid Ich benutze nicht C++. Kann es als eine separate Frage fragen, sagen Ihre neue Frage ist die Fortsetzung dieser Frage. –

+0

Sie sollten diese Includes so ändern, dass ihr Pfad auf den Ort zeigt, an dem Sie diese Dateien installiert haben. Es sollte ein relativer Pfad sein, kein vollständiger Pfad. –

5

Es gibt keine opencv-Funktion, um direkt Quadrate zu finden.

Aber Sie können die HoughLines-Funktion verwenden, die Linien erkennt und Überschneidungen zwischen Linien mit 90-Grad-Winkeln findet.

Um Winkel zwischen den Linien messen ich Ihnen einen Java-Code-Snippet zur Verfügung stellen kann:

// returns cosine of angle between line segments 0 to 1, and 0 to 2. 
// pt0 is the vertex/intersection 
// angle of 90 degrees will have a cosine == 0 

public static final double angleCosine(Point pt1, Point pt0, Point pt2) { 
    double dx1 = pt1.x - pt0.x; 
    double dy1 = pt1.y - pt0.y; 
    double dx2 = pt2.x - pt0.x; 
    double dy2 = pt2.y - pt0.y; 
    return (dx1 * dx2 + dy1 * dy2)/Math.sqrt((dx1 * dx1 + dy1 * dy1) * (dx2 * dx2 + dy2 * dy2) + 1e-10); 
} 

Docs über HoughLines

:

http://docs.opencv.org/modules/imgproc/doc/feature_detection.html?highlight=houghlines#houghlines

Verwandte Themen