【问题标题】:detect blob over other blob检测 blob 超过其他 blob
【发布时间】:2011-10-16 07:31:36
【问题描述】:

我使用 OpenCV 和 cvblob 库来玩 blob。

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

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

在 cvblob 库中要检测 blob,您必须有一个二进制图像。

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

我该怎么做。

提前致谢

【问题讨论】:

    标签: opencv blob segment


    【解决方案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 可能会更困难,因为 cvblob 不喜欢重叠的 blob(如我所见)。您可能必须实现自己的跟踪方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 2017-11-21
      相关资源
      最近更新 更多