2011-11-08 13 views
5

Właśnie zaczynam uczyć się programowania OpenCV. Czy mogę zapytać o to, w jaki sposób mogę zidentyfikować linie i krzywe w OpenCV? Mój problem polega na tym, że muszę określić, czy obraz zawiera krzywą wypukłą lub wklęsłą (krzywa pozioma lub pionowa), linię pionową, ukośną lub poziomą.OpenCV Identyfikowanie linii i krzywych

W moim kodzie użyłem CvSetImageROI do zrobienia określonej części obrazu, a następnie próbuję zidentyfikować każdy według wspomnianych linii/krzywych.

Czy są dostępne funkcje w OpenCV? Bardzo dziękuję za pomoc. Przy okazji, używam Linuksa i C++.

+0

Znajdź dowolną metodę identyfikacji krzywych w obrazie. –

Odpowiedz

5

Transformacja Hough http://en.wikipedia.org/wiki/Hough_transform, http://homepages.inf.ed.ac.uk/rbf/HIPR2/hough.htm to standardowy sposób, aby to zrobić. W swojej prostej formie (zaimplementowanej w OpenCV) może wykryć linie pozycji arbitrażu oraz kątów i segmentów linii.

Spójrz na przykład http://opencv.itseez.com/modules/imgproc/doc/feature_detection.html?highlight=hough#houghlinesp

Na łukach, proces detekcji jest nieco bardziej skomplikowana i trzeba ogólna Hough przekształcać nie jest jeszcze dostępna w OCV, ale można napisać to jako ćwiczenie lub poszukaj dobrej implementacji. http://en.wikipedia.org/wiki/Generalised_Hough_transform opisuje to (w skrócie)

+3

Możesz również zajrzeć do Canny() i FindContours() – Adrian

+0

Jak mogę sprawdzić kąty? Czy mogę to odczytać z parametrów? Dziękuję Ci bardzo! – cmsl

+0

Transformata Hough zwraca kąty i przechwytuje (jeśli używasz klasycznego) i segmenty końcowe (dla probabilistycznego). Kąty można wyodrębnić za pomocą prostych obliczeń geometrycznych z punktów końcowych lub użyć klasycznej transformacji. Sprawdź dokumentację OpenCV i przykład w powyższym linku – Sam

Powiązane problemy