私はOpenCVの初心者ですが、その特定のケースでは、cvblobを使用する代わりに、CV_RETR_EXTERNALフラグ(CV_RETR_TREEを使用すると、黄色のブロブは青色のブロブになります)を使用してcvFindContoursを操作する必要があると思います。
それらを追跡するかどうかによって異なります(cvblobは、camshiftを実装する代わりに、blobを追跡するための迅速かつ効率的な方法を提供します)。
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;
}
}
}
輪郭によって提供される情報を使用すると、ブロブの図心、角度、および境界ボックスを簡単に見つけることができます。
cvblobは(私が見ることができるように)オーバーラップするブロブを好まないので、これらのブロブを追跡することはより難しいかもしれません。独自の追跡方法を実装する必要がある場合があります。