2012-06-13 11 views
5

Czy są jakieś funkcje opencv, takie jak "cvHoughCircles()", które mogą być używane do programowania wykrywanie kwadratów dla programu wykrywania okręgu, który jest CvSeq * circles = cvHoughCircles(), ale nie mogłem znaleźć dla wykrycia kwadratu.Czy istnieją jakieś funkcje opencv, takie jak "cvHoughCircles()" do wykrywania kwadratów?

+2

Zważywszy, że wykrycie kwadratów jest znacznie łatwiejsze niż wykrywanie kręgi, nie zdziwiłbym się, gdyby squarefinding pozostawiono jako ćwiczenie dla kodera. Zasadniczo musisz znaleźć długie, połączone kolinearnie segmenty, które przecinają się pod kątem prostym i możesz wygenerować te segmenty za pomocą filtra i detektora krawędzi. Większość narzędzi, które musisz zrobić, powinno już być w OpenCV. – Rook

+0

W tym celu użyjemy transformacji Hough dla linii, która jest również zaimplementowana w OpenCV;) – CTZStef

+0

Patrz: http://stackoverflow.com/questions/10533233/opencv-c-obj-c-advanced-square- wykrywanie Istnieją trzy lub cztery podejścia, które można wypróbować pod tym linkiem. Ciesz się :) – ChathuraSam

Odpowiedz

8

Nie potrzeba żadnej oddzielnej funkcji do tego. OpenCV jest dostarczany z kwadratową próbką detekcji (która faktycznie wykrywa prostokąty, możesz dodać ograniczenie, że wszystkie strony powinny być równe długości, aby uzyskać kwadrat).

Sprawdź ten link: squares.cpp

Jest to dobre wyjaśnienie, w jaki sposób ten kod działa w tym SOF: How to identify square or rectangle with variable lengths and width by using javacv?

Poniżej wynik można uzyskać, gdy zastosowanie tego kodu.

enter image description here

+0

bt gdy próbuję uruchomić program, który pokazuje 2 błędy z powodu ** # include "opencv2/core/core.hpp" ** i ** # include "opencv2/imgproc/imgproc.hpp" ** ///// Błąd- \t błąd krytyczny C1083: Nie można otworzyć pliku include: "opencv2/core/core.hpp": Brak takiego pliku lub katalogu. Czy mógłbyś mi powiedzieć, jak rozwiązać ten błąd – Thar1988

+0

Przykro mi nie używam C++. Można go zadać jako osobne pytanie, mówiąc, że twoje nowe pytanie jest kontynuacją tego pytania. –

+0

Powinieneś zmienić te załączniki, aby ich ścieżka wskazywała miejsce zainstalowania tych plików. Powinna to być ścieżka względna, a nie pełna. –

5

Nie ma funkcji opencv, aby bezpośrednio znaleźć kwadraty.

Ale możesz użyć funkcji houghLines, która wykrywa linie i znaleźć przecięcia między liniami pod kątem 90 stopni.

Aby zmierzyć kąty pomiędzy liniami mogę zapewnić Państwu fragment kodu Java:

// 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); 
} 

Dokumenty o houghLines:

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

Powiązane problemy