Я довольно новичок в OpenCV, но я полагаю, что в этом конкретном случае вам следует работать с cvFindContours с флагом CV_RETR_EXTERNAL (с CV_RETR_TREE, ваш желтый шарик будет в синем) вместо использования cvblob.
Это зависит от того, хотите ли вы отслеживать их или нет (cvblob предлагает быстрый и эффективный способ отслеживания больших двоичных объектов вместо необходимости использовать camshift).
CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* firstContour = cvCreateSeq(CV_SEQ_ELTYPE_POINT, sizeof(CvSeq), sizeof(CvPoint), storage);
cvFindContours(image, storage, &firstContour, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
// S'il y a un contour
if(firstContour != 0) {
for( CvSeq* c = firstContour; c != NULL; c = c->h_next ) {
for(int i = 0; i < c->total; ++i) {
// Get each point of the current contour
CvPoint* pt = CV_GET_SEQ_ELEM(CvPoint, c, i);
double x = pt->x;
double y = pt->y;
}
}
}
С помощью информации, предоставленной контуром, вы можете легко найти центроид, угол и ограничительную рамку вашего объекта.
Отслеживание этих BLOB-объектов может быть более сложным, так как cvblob не любит перекрывающиеся BLOB-объекты (как я вижу). Возможно, вам придется реализовать свой собственный метод отслеживания.