使用 emgu 3.0、MorphologyEx、c# 进行开闭图像处理

Image processing with opening and closing using emgu 3.0, MorphologyEx, c#

如何使用新版本的emgu实现图片的开合处理?

我找到了这个: www.whosebug.com/questions/11567350/opening-and-closing-using-opencv/

但我不能再使用 "StructuringElementEx" 并且新的 "image.MorphologyEx()" 方法需要更多的值。

我也用 .dilate 和 .erode 尝试过,但这只能用于 3x3 矩形形状,不太成功。

一个"updated"例子就太好了!

在使用Emgu CV 3.0的MorphologyEx时也遇到了同样的问题
我在 Github.
中找到了这个测试代码 希望对您有所帮助!

[Test]
  public void TestMorphEx()
  {
     Mat kernel1 = CvInvoke.GetStructuringElement(Emgu.CV.CvEnum.ElementShape.Cross, new Size(3, 3), new Point(1, 1));
     Matrix<byte> kernel2 = new Matrix<byte>(new Byte[3, 3] { { 0, 1, 0 }, { 1, 0, 1 }, { 0, 1, 0 } });
     //StructuringElementEx element2 = new StructuringElementEx(new int[3, 3] { { 0, 1, 0 }, { 1, 0, 1 }, { 0, 1, 0 } }, 1, 1);
     Image<Bgr, Byte> tmp = new Image<Bgr, byte>(100, 100);
     Image<Bgr, Byte> tmp2 = tmp.MorphologyEx(Emgu.CV.CvEnum.MorphOp.Gradient, kernel1, new Point(-1, -1), 1, CvEnum.BorderType.Default, new MCvScalar());
     Image<Bgr, Byte> tmp3 = tmp.MorphologyEx(Emgu.CV.CvEnum.MorphOp.Gradient, kernel2, new Point(-1, -1), 1, CvEnum.BorderType.Default, new MCvScalar());
     //Image<Bgr, Byte> tmp2 = tmp.MorphologyEx(element1, Emgu.CV.CvEnum.CV_MORPH_OP.CV_MOP_GRADIENT, 1);
     //Image<Bgr, Byte> tmp3 = tmp.MorphologyEx(element2, Emgu.CV.CvEnum.CV_MORPH_OP.CV_MOP_BLACKHAT, 1);
  }

此函数在 EMGU 3.1 中不会使用 Mat

我正在用这个。

// Opening (erode->dilate) para quitar ruido.
// get rid of small objects
Mat kernelOp = CvInvoke.GetStructuringElement(ElementShape.Rectangle, new Size(3,3), new Point(-1, -1));
CvInvoke.MorphologyEx(ThresholdMask, _Morphology, MorphOp.Open, kernelOp, new Point(-1, -1), 1, BorderType.Default, new MCvScalar());

// Closing (dilate -> erode) para juntar regiones blancas.
Mat kernelCl = CvInvoke.GetStructuringElement(ElementShape.Rectangle, new Size(11, 11), new Point(-1, -1));
CvInvoke.MorphologyEx(_Morphology, _Morphology, MorphOp.Close, kernelCl, new Point(-1, -1), 1, BorderType.Default, new MCvScalar());