C#调用OpenCvSharp实现图像的开运算和闭运算

对图像同时进行腐蚀和膨胀操作,顺序不同则效果也不同。先腐蚀后膨胀为开运算,能够消除小斑点和细小的突出物、平滑图像以及改善边缘;先膨胀后腐蚀为闭运算,能够去除噪点、填补图像孔洞、连接邻近物体和平滑物体边界。
  OpenCvSharp中调用Cv2.MorphologyEx函数执行开运算、闭运算操作(函数原型见下方),其主要参数意义如下:
  1)src:源图像,可以输入Mat类型实例;
  2)dst:腐蚀或膨胀函数的处理结果,可以用Mat类型;
  3)op:指定形态学操作,MorphTypes类型,支持膨胀、腐蚀、开运算、闭运算等八种操作;
  4)element:核矩形,可以使用getStructuringElement函数创建,也可以使用Mat.Ones函数创建,可以是矩形,也可以是十字形、椭圆形等形状;
  5)anchor :核矩形的中心位置,默认值为(-1, -1),也即矩形的中心;
  6)iterations:操作执行次数,默认为1次。

csharp 复制代码
public static void MorphologyEx(InputArray src, OutputArray dst, MorphTypes op, InputArray? element, Point? anchor = null, int iterations = 1, BorderTypes borderType = BorderTypes.Constant, Scalar? borderValue = null)

最后是使用示例及图像处理效果,示例图形左侧为原图,右侧为处理后的图形,对比圈红出的内容即可看出两种不同操作的效果。

csharp 复制代码
int iterations = Convert.ToInt32(textBox1.Text);
using Mat imgSrc = Cv2.ImRead(lblMsg.Text);

using Mat kernalMat = Mat.Ones(Convert.ToInt32(textBox2.Text), Convert.ToInt32(textBox2.Text),MatType.CV_8UC1);
using Mat imgDest = new Mat(imgSrc.Size(), imgSrc.Type());
Cv2.MorphologyEx(imgSrc, imgDest, MorphTypes.Open, kernalMat, null, iterations);

Cv2.ImShow("开运算操作", imgDest);
csharp 复制代码
int iterations = Convert.ToInt32(textBox1.Text);
using Mat imgSrc = Cv2.ImRead(lblMsg.Text);

using Mat kernalMat = Mat.Ones(Convert.ToInt32(textBox2.Text), Convert.ToInt32(textBox2.Text), MatType.CV_8UC1);
using Mat imgDest = new Mat(imgSrc.Size(), imgSrc.Type());
Cv2.MorphologyEx(imgSrc, imgDest, MorphTypes.Close, kernalMat, null, iterations);

Cv2.ImShow("闭运算操作", imgDest);

参考文献:

[1]https://github.com/shimat/opencvsharp

[2]https://opencv.org/

[3]https://github.com/opencv/opencv

[4]https://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/opening_closing_hats/opening_closing_hats.html

相关推荐
pchmi15 小时前
C# OpenCV机器视觉:转速测量
c#·机器视觉·opencvsharp·转速测量
pchmi25 天前
C# OpenCV机器视觉:图像分割(让照片中的物体各自“安家”!)
opencv·c#·opencvsharp
gc_22996 个月前
C#调用OpenCvSharp实现图像的角点检测
opencvsharp·harris·角点检测
金增辉8 个月前
C#图像处理实例1:opencvsharp获取轮廓凸包
图像处理·opencv·c#·opencvsharp
beyond谚语9 个月前
三、Mat、Bitmap和Image数据类型之间的转换(OpenCvSharp)
opencvsharp
gc_22991 年前
测试C#使用OpenCvSharp从摄像头获取图片
c#·图片·摄像头·opencvsharp
anech1 年前
教你如何实现图片特征向量提取与相似度计算
opencv·向量·opencvsharp·向量搜索·图片相似度·相似度计算·图片特征提取
马儿不吃草1 年前
OpenCVSharp入门学习①-获取本地摄像头数据
c#·opencvsharp