学习图像处理知识---EmguCV3.4图像--图像形态学(一)
在EmguCV3.4图像形态学中,主要运用腐蚀,膨胀,开运算,闭运算,高帽,低帽等
其实都是采用腐蚀,膨胀这二个基本原理改造来。
在Image类和CvInvoke类中均能完成。
在Image类中比较简单:
public Image<TColor, TDepth> Erode(int iterations) //腐蚀iterations为迭代次数腐蚀,越大,黑色背景越大
public void _Erode(int iterations)//同上,只是此函数修改本图片。
public Image<TColor, TDepth> Dilate(int iterations)//膨胀iterations为迭代次数,越大白色背景越大
public void _Dilate(int iterations)//同上,只是此函数修改本图片。
在CvInvoke类中,参数比较多。
public static void Dilate( //膨胀 IInputArray src,//输入图像 IOutputArray dst,、//输出图像 IInputArray element,//输入处理的结构元素 Point anchor,//结构元素的中心位置 int iterations,//同Image类中迭代的次数 BorderType borderType,//边界的模式 MCvScalar borderValue//边界颜色 )
public static Mat GetStructuringElement(//用于得到上个函数IInputArray element ElementShape shape, Size ksize, Point anchor )
public static void Erode(//腐蚀,基本同膨胀的类型 IInputArray src, IOutputArray dst, IInputArray element, Point anchor, int iterations, BorderType borderType, MCvScalar borderValue )
用起来用Image类比较简单,很快简单,无需很多参数。
图例如图,下面主要为腐蚀,膨胀也是类似。
Emgu.CV.Image<Bgr, Byte> YUAN = new Image<Bgr, Byte>((Bitmap)pictureBox1.Image); // YUAN._Erode((int)numericUpDown1.Value); // YUAN._Dilate((int)numericUpDown1.Value); Mat a1 = CvInvoke.GetStructuringElement(Emgu.CV.CvEnum.ElementShape.Rectangle, new Size(3, 3), new Point(-1, -1)); Emgu.CV.Image<Bgr, Byte> chutu = new Image<Bgr, byte>(YUAN.Size); // CvInvoke.Dilate(YUAN, chutu, a1, new Point(-1, -1), (int)numericUpDown1.Value, Emgu.CV.CvEnum.BorderType.Default, new MCvScalar(255, 255, 0)); CvInvoke.Erode(YUAN, chutu, a1, new Point(-1, -1), (int)numericUpDown1.Value, Emgu.CV.CvEnum.BorderType.Default, new MCvScalar(0, 255,255)); pictureBox2.Image = chutu.Bitmap;