检测blob超过其他blob

时间:2011-07-29 22:16:29

标签: opencv blob segment

我使用OpenCV和cvblob库来玩blob。

现在我想在这种特殊情况下检测blob。

在这种情况下的问题或困难是在较大的一个和另一个blob上有两个blob与较大的一个blob重叠。

在用于检测blob的cvblob库中,您必须具有二进制图像。

我认为我需要创建两个或多个图像来分割颜色均匀的斑点,然后将它们二值化以获得图像中的所有斑点。

我该怎么做。

Image

提前致谢

1 个答案:

答案 0 :(得分:1)

我是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的质心,角度和边界框。

跟踪这些blob可能会更困难,因为cvblob不喜欢重叠blob(我可以看到)。您可能必须实施自己的跟踪方法。