EmguCV Blob计数器

时间:2018-08-18 23:44:00

标签: c# opencv object-detection emgucv

INPUT IMAGE

您好,我尝试学习EmguCV 3.3,但是我对斑点计数存在疑问。正如您在“输入图像”中看到的那样,我有黑色的斑点不均匀。

我正在尝试做这样的事情。

OUTPUT IMAGE

我需要在斑点周围绘制矩形并计数。 我尝试了一些方法,但是没有用。 我需要Help();

1 个答案:

答案 0 :(得分:0)

您可以使用FindCountours()或SimpleBlobDetection()来实现这一点,这是使用第一个示例代码:

Image<Gray, Byte> grayImage = new Image<Gray,Byte>(mRGrc.jpg);
Image<Gray, Byte> canny = new Image<Gray, byte>(grayImage.Size);
int counter = 0;

using (MemStorage storage = new MemStorage())

for (Contour<Point> contours  = grayImage.FindContours(Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_NONE, Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_TREE, storage);contours != null; contours = contours.HNext)
{
     contours.ApproxPoly(contours.Perimeter * 0.05, storage);
     CvInvoke.cvDrawContours(canny, contours, new MCvScalar(255), new MCvScalar(255), -1, 1, Emgu.CV.CvEnum.LINE_TYPE.EIGHT_CONNECTED, new Point(0, 0));
     counter++;
 }

using (MemStorage store = new MemStorage())

for (Contour<Point> contours1= grayImage.FindContours(Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_NONE, Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_TREE, store); contours1 != null; contours1 = contours1.HNext)
{
    Rectangle r = CvInvoke.cvBoundingRect(contours1, 1);
    canny.Draw(r, new Gray(255), 1);
 }

Console.Writeline("Number of blobs: " + counter);