7

我已经完成了艰苦的工作,将我的 MacBook 上的 iSight 摄像头变成了红外摄像头,对其进行了转换,设置了阈值等。现在有了一个看起来像这样的图像:

替代文字

我的问题是现在;我需要通过对白色像素进行分组来了解图像上有多少斑点。我不想使用cvBlob/ cvBlobsLib,我宁愿只使用 OpenCV 中已有的内容。

可以遍历像素并通过检查(阈值)触摸白色像素来对它们进行分组,但我猜可能有一种非常简单的方法可以从 OpenCV 做到这一点?

我猜我不能使用cvFindContours,因为这将检索一个大数组中的所有白色像素,而不是将它们分成“组”。有人可以推荐吗?(注意这些不是圆圈,只是小红外 LED 发出的光)

提前谢谢了!
沉迷

4

2 回答 2

8

循环遍历图像以寻找白色像素。当您遇到使用cvFloodFill该像素作为种子的像素时。然后增加每个区域的填充值,使每个区域具有不同的颜色。这称为标签。

于 2010-03-04T12:00:17.537 回答
4

是的,您可以使用cvFindContours(). 它返回指向找到的第一个序列的指针。使用该指针,您可以遍历找到的所有序列。

    // your image converted to grayscale
    IplImage* grayImg = LoadImage(...);

    // image for drawing contours onto
    IplImage* colorImg = cvCreateImage(cvGetSize(grayImg), 8, 3);

    // memory where cvFindContours() can find memory in which to record the contours
    CvMemStorage* memStorage = cvCreateMemStorage(0);

    // find the contours on image *grayImg*
    CvSeq* contours = 0;
    cvFindContours(grayImg, memStorage, &contours);

    // traverse through and draw contours
    for(CvSeq* c = contours; c != NULL; c = c->h_next) 
    {
         cvCvtColor( grayImg, colorImg, CV_GRAY2BGR );
         cvDrawContours(
                        colorImg,
                        c,
                        CVX_RED,
                        CVX_BLUE,
                        0, // Try different values of max_level, and see what happens
                        2,
                        8
         );
    }

除了这种方法,我建议你看看cvBlobsor cvBlobsLib。后者作为官方 blob 检测库集成在 OpenCV 2.0 中。

于 2010-03-04T17:47:39.600 回答