Skocz do zawartości

Wyszukiwanie konturów


mikowal91

Pomocna odpowiedź

Witam,

Czy mógłby mi ktoś pomóc w zakresie wyszukiwania konturów na obrazie? Sytuacja wygląda tak, że robie zdjęcie, pobieram obraz oczywisice odpowiednio go przetwarzam itp. na końcu zaznaczam na nim konutr, tylko chciałbym aby ten kontur był prawidłowy a mam wynik jak poniżej. Czy ktoś mógłby mi pomóc w danym temacie?

image.thumb.png.fd1a8d98e907a5dd03358d61488f046d.png

Link do komentarza
Share on other sites

Cześć,

czy zaznaczenie konturu robisz programowo? Jeśli tak jakiej biblioteki i kodu używasz? Dopiero po podaniu tych danych ktoś będzie w stanie Ci pomóc.

Pozdrawiam

Link do komentarza
Share on other sites

(edytowany)

@TrekerZerkałem już na dany projekt, niestety nic nie udało mi się pomocnego z niego wyciągnąć.

 

@FlyingDutch poniżej kod z jakiego korzystam 

include <iostream>

#include "OpenCV/cv.h"

#include "OpenCV/highgui.h"


CvSeq * znajdz_kontury(IplImage* obrazek)

{

// czytamy obraz, jezeli nie istnieje, to zwracamy NULL

IplImage* obraz;

cvCvtColor(obrazek, obraz, CV_RGB2GRAY);

if (obraz == NULL)

return NULL;


// nasz kontur

CvSeq * kontur;

// pamiec na obliczenia

CvMemStorage * mem = cvCreateMemStorage(0);

// operacja progrowania

cvThreshold(obraz, obraz, 100, 255, CV_THRESH_BINARY_INV);

// szukanie konturow

cvFindContours(obraz, mem, &kontur);

// aproksymacja konturow

kontur = cvApproxPoly(kontur, sizeof (CvContour), mem, CV_POLY_APPROX_DP, cvContourPerimeter(kontur) * 0.035);

// sprzatanie

cvReleaseImage(&obraz);

// powinnio sie jeszcze zwolnic memstora ale na potrzeby przykladu tego nie robimy

// (poniewaz zwracamy wskaznik na sekwencje do dalszego uzycia)


return kontur;

}

//--------------------------------------------------------------

void wyswietl_kontury(IplImage* kolorowyObraz)

{

// czytamy obraz, jezeli nie istnieje, to zwracamy NULL

IplImage * obraz = kolorowyObraz;

if (obraz == NULL)return;


// przystowowywanie obrazu

IplImage * do_analizy = cvCreateImage(cvSize(obraz->width, obraz->height), 8, 1);

cvCvtColor(obraz, do_analizy, CV_BGR2GRAY);


// nasz kontur

CvSeq * kontur;

// pamiec na obliczenia

CvMemStorage * mem = cvCreateMemStorage(0);

// operacja progowania

cvThreshold(do_analizy, do_analizy, 100, 255, CV_THRESH_BINARY_INV);

// szukanie konturow

cvFindContours(do_analizy, mem, &kontur, sizeof (CvContour), CV_RETR_TREE);


for (; kontur != NULL; kontur = kontur->h_next)

{

// aproksymacja konturu

CvSeq* temp_kontur = cvApproxPoly(kontur, sizeof (CvContour), mem, CV_POLY_APPROX_DP, cvContourPerimeter(kontur) * 0.035);

// zaznaczanie konturow na obrazie

cvDrawContours(obraz, temp_kontur, cvScalar(0.0, 255.0, 0.0, 0.0), cvScalar(0.0, 255.0, 0.0, 0.0), 100, 2, CV_AA, cvPoint(0, 0));

}

cvNamedWindow("kontury", CV_WINDOW_AUTOSIZE);

cvShowImage("kontury", obraz);


while (1)

{

int l = cvWaitKey(100);

if (l == 27)break;

}

}

//--------------------------------------------------------------



int main (int argc, char * const argv[])

{

IplImage * o = cvLoadImage("klatka.jpg", CV_LOAD_IMAGE_COLOR);

wyswietl_kontury(o);

return 0;

}

 

Edytowano przez mikowal91
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

13 godzin temu, Treker napisał:

zerknij na poniższy projekt, może będzie pomocny:

heh 🙂 

@mikowal91  a dlaczego używasz takie progowanie?

cvThreshold(obraz, obraz, 100, 255, CV_THRESH_BINARY_INV);

W sytuacji, gdy obraz cechuje się jakimś gradientem to nie jest to dobry pomysł. Wrzuć sobie na obraz wynik progowania, jeżeli będzie błąd to zlep 3 kanały w obraz RGB.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.