首页 > 解决方案 > FloodFill 函数产生奇怪的结果

问题描述

我需要在 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(如果这个函数真的像一根魔杖,它应该用白色填充整个图像),这就是我得到的:

莉娜托尔=255

这个可以看到的“矩形”没有意义,更糟糕的是,你可以看到这个矩形区域(在莉娜的帽子上)有一些白色像素......所以它甚至看起来都不是一种矩形约束。“伪矩形”中的一些像素也不是白色的......如果有人可以在他们的系统上使用 lena 图像测试这个功能,我会很好奇。

标签: c#emgucv

解决方案


推荐阅读