7种图像处理形态学(1)
视频讲解如下:
当前系列所有demo下载地址:
https://github.com/GaoRenBao/OpenCv4-Demo
不同编程语言对应的OpenCv版本以及开发环境信息如下:
语言 | OpenCv版本 | IDE |
C# | OpenCvSharp4.4.8.0.20230708 | Visual Studio 2022 |
C++ | OpenCv-4.5.5-vc14_vc15 | Visual Studio 2022 |
Python | OpenCv-Python (4.6.0.66) | PyCharm Community Edition 2022.1.3 |
OpenCv下有七种图像处理形态学:
1、腐蚀
2、膨胀
3、开运算
4、闭运算
5、形态学梯度
6、顶帽
7、黑帽
这里先给大家演示如何使用erode进行腐蚀操作,以及使用dilate进行膨胀操作
腐蚀和膨胀的执行效果如下:

C#版本代码
C#版本需要安装“OpenCvSharp4”、“OpenCvSharp4.runtime.win”两个库才行。不然会报错。
如果需要使用“ BitmapConverter.ToBitmap”操作,则需要追加安装“OpenCvSharp4.Extensions”库。
using OpenCvSharp;
namespace demo
{
internal class Program
{
static void Main(string[] args)
{
// 载入原图
Mat srcImage = Cv2.ImRead("../../../images/dog.jpg");
// 显示原图
Cv2.ImShow("【原图】", srcImage);
// 定义核大小
Mat element = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(15, 15));
// 进行腐蚀操作
Mat out1 = new Mat();
Cv2.Erode(srcImage, out1, element);
// 进行膨胀操作
Mat out2 = new Mat();
Cv2.Dilate(srcImage, out2, element);
// 显示效果图
Cv2.ImShow("腐蚀【效果图】", out1);
Cv2.ImShow("膨胀【效果图】", out2);
Cv2.WaitKey(0);
}
}
}
C++版本代码
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
// 载入原图
Mat srcImage = imread("../images/dog.jpg");
// 创建窗口
namedWindow("【原图】");
namedWindow("腐蚀【效果图】");
namedWindow("膨胀【效果图】");
// 显示原图
imshow("【原图】", srcImage);
// 定义核大小
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
// 进行腐蚀操作
Mat out1;
erode(srcImage, out1, element);
// 进行膨胀操作
Mat out2;
dilate(srcImage, out2, element);
// 显示效果图
imshow("腐蚀【效果图】", out1);
imshow("膨胀【效果图】", out2);
waitKey(0);
return 0;
}
Python版本代码
import cv2
# 载入原图
srcImage = cv2.imread('../images/dog.jpg')
# 显示原图
cv2.imshow('image', srcImage)
# 定义核大小
element = cv2.getStructuringElement(cv2.MORPH_RECT, (15, 15))
# 进行腐蚀操作
out1 = cv2.erode(srcImage, element)
# 进行膨胀操作
out2 = cv2.dilate(srcImage, element)
# 显示效果图
cv2.imshow('Erode', out1)
cv2.imshow('Dilate', out2)
cv2.waitKey(0)
cv2.destroyAllWindows()