2014-06-12 21 views
7

Próbuję wykryć prostokąty za pomocą OpenCV. Czasami jednak staje się to dość trudne po uruchomieniu metody Canny, ponieważ dwie krawędzie są zwykle wymazywane. Próbowałem wielu różnych zestawów progów i zacierałem je przed zastosowaniem Canny'ego, ale nie mam jeszcze dużych pozytywnych wyników. Obecnie nie mam rozmyciu obrazu, więc jest to dość dużo, co robię:Wykrywanie krawędzi za pomocą OpenCV (Canny)

Mat imgSource = Highgui.imread(filepath); 
Imgproc.Canny(imgSource, imgSource, 300, 600, 5, true); 

Przykład:

original http://imagizer.imageshack.us/a/img822/8776/27i9j.jpg Canny http://imagizer.imageshack.us/a/img841/9868/wkc95.jpg

Następnie próbuję findContours metodę w OpenCV do wykrycia prostokąta, działa w 80% przypadków, jak mogę go poprawić?

+0

jako punkt wyjścia, spróbuj zrobić cvtColor (imgSource, imgSource, CV_BGR2GRAY); próg (imgSource, imgSource, 25 255, THRESH_BINARY); a następnie findContours –

Odpowiedz

7

Spróbuj z inną wartością progową, w tym przypadku uzyskasz lepszy wynik przy użyciu niższych wartości progowych, takich jak 10,100.

blur(src,src,Size(3,3)); 
cvtColor(src,tmp,CV_BGR2GRAY); 
Canny(src, thr, 10, 100, 3); 

Albo inaczej dostaniesz obrazy konturu poprzez zastosowanie threshold jak,

threshold(tmp,thr,50,255,THRESH_BINARY_INV); 
2

tutaj problemem jest kompresja obrazu JPEG typ prawdopodobnie.
spróbować konwersji obrazu na monochromatyczny skoro masz tylko Black/White obraz i edytować wartość progową.
powinno to wyeliminować szum wokół krawędzi linii. następnie canny można zastosować z dowolnymi wartościami.

Powiązane problemy