使用 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());
如何使用新版本的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());