如何使用ConnectedComponents删除二进制映像中的连接对象

时间:2018-09-08 04:20:27

标签: c# opencv image-processing emgucv

我正在使用EmguCV和C#。我想使用ConnectedComponentsWithStats从图像中删除小的连接对象

I have following binary image as input

我能够为指定区域绘制一个矩形。现在我想从二进制图像中删除对象

这是我的代码

Image<Gray, byte> imgry = image.Convert<Gray, byte>();
    var mask = imgry.InRange(new Gray(50), new Gray(255));

    var label = new Mat();
    var stats = new Mat();
    var centroids = new Mat();
    int labels = CvInvoke.ConnectedComponentsWithStats(mask, label, stats,
                                                       centroids,
                                                       LineType.EightConnected,
                                                       DepthType.Cv32S);

    var img = stats.ToImage<Gray, int>();

    Image<Gray, byte> imgout1 = new Image<Gray, byte>(image.Width, image.Height);

    for (var i = 1; i < labels; i++)
    {
        var area = img[i, (int)ConnectecComponentsTypes.Area].Intensity;
        var width = img[i, (int)ConnectecComponentsTypes.Width].Intensity;
        var height = img[i, (int)ConnectecComponentsTypes.Height].Intensity;    
        var top = img[i, (int)ConnectecComponentsTypes.Top].Intensity;
        var left = img[i, (int)ConnectecComponentsTypes.Left].Intensity;

        var roi = new Rectangle((int)left, (int)top, (int)width, (int)height);

        if (area > 1000)
        {
            CvInvoke.Rectangle(imgout1, roi, new MCvScalar(255), 1);

        }
    }

Drawn Rectangle for specified area

如何删除指定大小的对象

My output image should be like this

当轮廓尺寸为10240 * 10240且我的应用程序进入中断模式的粒子数量更多时,我已经通过使用轮廓实现了一种对小尺寸图像效果很好的方法

0 个答案:

没有答案