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);