FloodFill函数产生奇怪的结果

时间:2019-03-30 23:23:27

标签: c# emgucv

我需要在C#中使用EMGUCV的FloodFill函数。

我设法这样使用它:

        Image<Gray, Byte> img = new Image<Gray, byte>(this.B);
        img.Save("orig.png");
        int height = img.Rows;
        int width = img.Cols;
        Point s = new Point( 227, 295);
        int tol = 8;
        Mat outputMask = new Mat(height + 2, width + 2, Emgu.CV.CvEnum.DepthType.Cv8U, 1);
        Rectangle dummyRect = new Rectangle();
        CvInvoke.FloodFill(img,
                           outputMask,
                           s,
                           new MCvScalar(255, 0, 0),
                           out dummyRect,
                           new MCvScalar(tol), new MCvScalar(tol),
                           Emgu.CV.CvEnum.Connectivity.EightConnected);
        //Emgu.CV.CvEnum.FloodFillType.MaskOnly);
        img.Save("imgModif.png");
        Console.Write("End");

但是当我使用img(或outputMask)时得到的输出根本没有任何意义。一些白色的矩形区域。我期待“像Photoshop”魔术棒的结果。知道什么是错的吗?此外,即使我指定(255,0,0)作为填充颜色,结果在img中也是白色。 (B是预加载的位图图像)

我正在尝试执行以下操作:

http://www.andrew-seaford.co.uk/flood-fill-opencv/

除了我最初使用灰度图像外。

如果我将tol设置为255(如果此功能确实表现得像魔术棒,它将以白色填充整个图像),我将得到以下结果:

Lena tol=255

可以看到的这个“矩形”是没有意义的,甚至更糟的是,您可以看到一些白色像素从该矩形区域中出来(在莉娜的帽子上)...因此,它似乎根本不是一个一种矩形约束。另外,“伪矩形”中的一些像素不是白色的...如果有人可以用lena图像在其系统上测试此功能,我会很好奇。

0 个答案:

没有答案