opencv - 检测 blob 超过其他 blob

我使用 OpenCV 和 cvblob 库来玩 blob。

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

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

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

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

我怎样才能做到这一点。



提前致谢

最佳答案

我是 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(如我所见)。您可能必须实现自己的跟踪方法。

https://stackoverflow.com/questions/6879586/

相关文章:

opencv - 检测器->检测(img,关键点);错误

android - 使用来自移动平台的实时视频提要进行人工检测(android)

visual-studio-2010 - cxcore210.dll 的问题

vb.net - 如何从VB.net轻松调用IronPython函数?

python - 无法在 OpenCV2.1 上导入 cv

image-processing - 将CvFindContours()从8连接更改为4连接的邻居

python - 来自Image的Python OpenCV cvCreateStructuring

opencv - OpenCV-CirclesGridFinder的文档

exception - openNI干扰cvCreateCameraCapture()

image-processing - 以下用于图像调整大小的 c++ 双三次插值代码有什么问题