Opencv emguCV得到最大的斑点

Opencv emguCV得到最大的斑点,opencv,blob,tracking,emgucv,threshold,Opencv,Blob,Tracking,Emgucv,Threshold,我在做颜色跟踪。。 我专门跟踪一个橙色的球,也许是一个篮球,还有身体的kinect,我正在制作一个罚球投篮指南。 这是我的箱子 我已经对我的图像设置了阈值,对其进行了腐蚀以去除噪音和其他不重要的对象(非球),然后放大几次以强调球。。 所以我得到了最后一个二值图像,在这里我成功地分离出了球。。还有其他斑点..(不是球的较小斑点)。。我如何得到最大的球并放置一个边界框 顺便说一句,我试过hough circles,但是速度很慢,,…谢谢!一些代码可能很有用这是我用来获取图像中最大blob的代码: p

我在做颜色跟踪。。 我专门跟踪一个橙色的球,也许是一个篮球,还有身体的kinect,我正在制作一个罚球投篮指南。 这是我的箱子

我已经对我的图像设置了阈值,对其进行了腐蚀以去除噪音和其他不重要的对象(非球),然后放大几次以强调球。。 所以我得到了最后一个二值图像,在这里我成功地分离出了球。。还有其他斑点..(不是球的较小斑点)。。我如何得到最大的球并放置一个边界框


顺便说一句,我试过hough circles,但是速度很慢,,…谢谢!一些代码可能很有用

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

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);
    }
publicstaticblobfindlargestobject(图像块,矩形)
{
图像掩码=block.CopyBlank();
轮廓最大轮廓=空;
双大面积=0;
对于(var等高线=块。FindContours(CHAIN_Abrox_METHOD.CV_CHAIN_Abrox_SIMPLE,
RETR\u TYPE.CV\u RETR\u EXTERNAL);等高线!=null;等高线=等高线.HNext)
{
如果(等高线面积>大面积)
{
大面积=等高线。面积;
最大轮廓=轮廓;
}
}
//填充最大的轮廓
蒙版绘制(最大轮廓,新灰色(255),-1);
返回新Blob(遮罩、最大轮廓、矩形);
}
对于Blob:

public class Blob 
{
    Image<Gray,byte> Mask{ get; set; }
    Contour<Point> Contour { get; set; }
    Rectangle Rectangle { get; set; }
}
公共类Blob
{
图像掩码{get;set;}
等高线{get;set;}
矩形{get;set;}
}

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

您可以发布一些代码吗?那会有帮助的!