當前位置: 妍妍網 > 碼農

C# OpenCvSharp 形態學處理效果

2024-05-08碼農

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