Как извлечь тонкие линии в виде отдельных контуров / связанных компонентов с OpenCV? - PullRequest
3 голосов
/ 05 февраля 2011

Я использовал прореживание расстояния на изображении. Теперь попробуйте извлечь каждый подключенный компонент отдельно - если есть две тонкие линии, то он должен обнаружить три такие отдельные линии и компоненты.

/*finding contours*/
IplImage *cc_color; 
cc_color = cvCreateImage(cvGetSize(thin_img), IPL_DEPTH_8U, 3);


    CvMemStorage *mem;
mem = cvCreateMemStorage(0);


int count = 0;
char* ch = new char [2];

CvSeq *contours = 0;

  CvSeq *ptr;
/*finding contours of morphed image*/
cvFindContours(thin_img, mem, &contours, sizeof(CvContour), CV_RETR_CCOMP,       CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));

    /*all contours on one image - random coloring*/
for (ptr = contours; ptr != NULL; ptr = ptr->h_next) 
    {
            CvScalar ext_color = CV_RGB( rand()&255, rand()&255, rand()&255 ); /*randomly coloring different contours*/
            cvDrawContours(cc_color, ptr, ext_color, CV_RGB(0,0,0), -1, CV_FILLED, 8, cvPoint(0,0));          
    }

thin_image - это ввод. выходные данные должны иметь каждую строку, окрашенную случайным образом, как отдельный контур / компонент. Однако это только обнаружение замкнутых форм как контуров. Как определить строки как компоненты ??

Выходное изображение: Input image

Исходное изображение: enter image description here

Красные прямоугольники указывают примерные детали, которые должны быть обнаружены как компоненты. Но обнаружены только замкнутые формы.

1 Ответ

3 голосов
/ 06 февраля 2011

Если вы ищете линии / границы как компоненты вместо внутренних областей, вы должны инвертировать thin_image (черный -> белый и белый -> черный) перед применением findContours.

...