emguCV获得最大的blob

时间:2013-03-02 17:15:37

标签: opencv blob tracking emgucv threshold

我正在进行色彩跟踪.. 而且我特意追踪一个橙色球,一个篮球球,还有身体的kinect,我正在制作一个罚球射门指南。 这是我的情况

我已经对我的图像进行了阈值处理,侵蚀了它以消除噪音,以及其他无关紧要的物体(非球),然后扩张几次以强调球... 所以我来到一个最终的二进制图像 - 我已经成功地隔离了球..还有其他的blob ..(较小的blob不是球)..我怎么得到最大的blob(球)并放一个边界框?

我已经尝试过hough circle btw,但这很慢,谢谢!一些代码会很有用

1 个答案:

答案 0 :(得分:2)

这是我用来获取图像中最大斑点的代码:

public static Blob FindLargestObject(Image<Gray, byte> block, Rectangle rectangle)
    {
        Image<Gray, byte> mask = block.CopyBlank();

        Contour<Point> largestContour = null;
        double largestarea = 0;

        for (var contours = block.FindContours(CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE,
            RETR_TYPE.CV_RETR_EXTERNAL); contours != null; contours = contours.HNext)
        {
            if (contours.Area > largestarea)
            {
                largestarea = contours.Area;
                largestContour = contours;
            }
        }

        // fill the largest contour
        mask.Draw(largestContour, new Gray(255), -1);

        return new Blob(mask, largestContour, rectangle);
    }

对于Blob:

public class Blob 
{
    Image<Gray,byte> Mask{ get; set; }
    Contour<Point> Contour { get; set; }
    Rectangle Rectangle { get; set; }
}

blob将包含您想要获取的所有信息。