在OpenCV中找到小轮廓

时间:2014-12-30 16:48:34

标签: opencv emgucv contour

我正在使用EmguCV(OpenCV的C#包装器),我可以使用FindContours找到轮廓:

        Contour<Point> cnts;
        cnts = imgLineMask.FindContours(Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_NONE, Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_LIST);

        for (; cnts != null; cnts = cnts.HNext)
        {
            double ar = cnts.Area;
        }

然而,如果轮廓只有一个或两个像素大,它们的面积和力矩都是零。反正有没有让它与这么小的轮廓一起工作?或者只是根本无法使用非常小的轮廓?

由于

1 个答案:

答案 0 :(得分:2)

不,我不认为使用Findcontours可以让它发挥作用。

原因是OpenCV方法是 contour finding 方法,而不是 blob查找方法。该区域是根据周长计算的,而不仅仅是像素的总和。

周长是轮廓上相邻像素之间距离的总和。因此,2x2像素斑点的周长为4,但是该区域将是1 = 1的单位。并且单个像素的周长为0,因此面积为0。

如果要查找单个像素斑点,可以查看Recursive Grass-Fire算法或Connected-Component algorithm。后者可能是最容易实现的。