EmguCV 斑点计数器

EmguCV Blob Counter

INPUT IMAGE

你好,我正在尝试学习 EmguCV 3.3,我有一个关于斑点的问题 counting.As 你在输入图像中看到我有黑色不均匀的斑点。

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

OUTPUT IMAGE

我需要在斑点周围绘制矩形并计算它们。 我尝试了一些方法,但没有一个起作用。 我需要帮助();

您可以使用 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);