我需要在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图像在其系统上测试此功能,我会很好奇。