1、腐蚀
腐蚀操作可以让图像沿着自己的边界向内收缩。
2、膨胀
膨胀操作与腐蚀操作正好相反,让图像沿着自己的边界向外扩张。
3、开运算
开运算就是先腐蚀再膨胀,可以用来抹除图像外部的细节或者噪音。
4、闭运算
闭运算就是先膨胀再腐蚀,可以用来抹除图像内部的细节或者噪音。
5、梯度运算
梯度运算的过程是让原图的膨胀图像减去原图的腐蚀图像,因为膨胀图比原图大,腐蚀图比原图小,利用腐蚀图将膨胀图像掏空,就得到了原图的轮廓图像。
6、顶帽运算
顶帽运算就是让原图减去原图的开运算图像,开运算会抹除图像的外部细节,「有外部细节」的图像减去「无外部细节」的图像,得到的结果就只剩外部细节了。
7、黑帽运算
黑帽运算就是让原图的闭运算图像减去原图,闭运算会抹除图像的内部细节,「无外部细节」的图像减去「有内部细节」的图像,得到的结果就剩内部细节了。
代码
Mat src = Cv2.ImRead("test.jpg");
Mat element = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(3, 3));
Mat dst = new Mat();
// 腐蚀
Mat erodedImage = new Mat();
Cv2.Erode(src, erodedImage, element);
// 膨胀
Mat dilatedImage = new Mat();
Cv2.Dilate(src, dilatedImage, element);
// 开运算
Cv2.MorphologyEx(src, dst, MorphTypes.Open, element);
// 闭运算
Cv2.MorphologyEx(src, dst, MorphTypes.Close, element);
// 顶帽运算
Cv2.MorphologyEx(src, dst, MorphTypes.TopHat, element);
// 黑帽运算
Cv2.MorphologyEx(src, dst, MorphTypes.BlackHat, element);
// 梯度运算
Cv2.MorphologyEx(src, dst, MorphTypes.Gradient, element);