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