OpenCV将白色像素分组

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

替代文字

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

我可以遍历像素,并通过检查(阈值)触摸白色像素来对它们进行分组,但是我猜测OpenCV中可能有这么简单的方法吗?

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

提前谢谢了!
tommed


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


是的,你可以用cvFindContours()来做到这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
         );
    }

除了这个方法,我建议你看看cvBlobscvBlobsLib 。 后者一个作为官方的blob检测库集成在OpenCV 2.0中。

链接地址: http://www.djcxy.com/p/79627.html

上一篇: OpenCV grouping white pixels

下一篇: Transcribing ASCII maze into graph