Я использовал прореживание расстояния на изображении. Теперь попробуйте извлечь каждый подключенный компонент отдельно - если есть две тонкие линии, то он должен обнаружить три такие отдельные линии и компоненты.
/*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 - это ввод. выходные данные должны иметь каждую строку, окрашенную случайным образом, как отдельный контур / компонент. Однако это только обнаружение замкнутых форм как контуров. Как определить строки как компоненты ??
Выходное изображение:
Исходное изображение:
Красные прямоугольники указывают примерные детали, которые должны быть обнаружены как компоненты. Но обнаружены только замкнутые формы.