我是 OpenCV 的初学者,但我想,对于这种特殊情况,您应该使用带有 CV_RETR_EXTERNAL 标志的 cvFindContours(使用 CV_RETR_TREE,您的黄色 blob 将是蓝色的)而不是使用 cvblob。
这取决于您是否要跟踪它们(cvblob 提供了一种快速有效的方法来跟踪 blob,而不必实施 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(如我所见)。您可能必须实现自己的跟踪方法。