OpenCV группировка белых пикселей

Я проделал тяжелую работу, превратив камеру iSight на свой MacBook в инфракрасную камеру, преобразовал ее, установил порог и т. Д. И теперь имеет изображение, которое выглядит примерно так:

alt text

Моя проблема сейчас; Мне нужно знать, сколько капель на моем изображении, группируя белые пиксели. Я не хочу использовать cvBlob / cvBlobsLib , я бы скорее использовал то, что уже есть в OpenCV.

Я могу перебирать пиксели и группировать их, проверяя (пороговое) касание белых пикселей, но я предполагаю, что это, вероятно, очень простой способ сделать это из OpenCV?

Я предполагаю, что я не могу использовать cvFindContours как это будет извлекать все белые пиксели в одном большом массиве, а не разделять их на «группы». Может ли кто-нибудь порекомендовать? (Обратите внимание, что это не круги, только свет, испускаемый небольшими ИК-светодиодами)

Спасибо заранее!
tommed

Прокрутите изображение, ища белые пиксели. Когда вы сталкиваетесь с одним, вы используете cvFloodFill с этим пикселем в качестве семени. Затем увеличивайте значение заливки для каждой области, чтобы каждая область имела другой цвет. Это называется маркировкой.

Да, вы можете сделать это с помощью cvFindContours() . Он возвращает указатель на первую найденную последовательность. Используя этот указатель, вы можете пройти через все найденные последовательности.

  // your image converted to grayscale IplImage* grayImg = LoadImage(...); // image for drawing contours onto IplImage* colorImg = cvCreateImage(cvGetSize(grayImg), 8, 3); // memory where cvFindContours() can find memory in which to record the contours CvMemStorage* memStorage = cvCreateMemStorage(0); // find the contours on image *grayImg* CvSeq* contours = 0; cvFindContours(grayImg, memStorage, &contours); // traverse through and draw contours for(CvSeq* c = contours; c != NULL; c = c->h_next) { cvCvtColor( grayImg, colorImg, CV_GRAY2BGR ); cvDrawContours( colorImg, c, CVX_RED, CVX_BLUE, 0, // Try different values of max_level, and see what happens 2, 8 ); } 

Помимо этого метода, я бы посоветовал вам взглянуть на cvBlobs или cvBlobsLib . Последний один интегрирован в OpenCV 2.0 в качестве официальной библиотеки обнаружения blob.