编辑
2025-02-03
C# 应用
00
请注意,本文编写于 92 天前,最后修改于 92 天前,其中某些信息可能已经过时。

目录

的 WinForm 应用程序中,使用 OpenCvSharp 实现图像的膨胀(Dilation)和腐蚀(Erosion)操作。
应用场景
膨胀(Dilation)
腐蚀(Erosion)
膨胀和腐蚀结合的应用
环境设置
安装 OpenCvSharp
创建 WinForm 项目
创建基础 WinForm
代码实现
实现图像加载
实现膨胀操作
实现腐蚀操作
运行程序
WinForm 项目中使用 OpenCvSharp 有所帮助!

形态学处理(Morphological Processing)是图像处理中的一种基本操作,主要用于图像的形状提取、形态特征分析和对象的清晰化。OpenCvSharp 是 OpenCV 的 C# 包装器,能够让开发者使用 .NET 语言进行计算机视觉任务。在本文中,讲解怎样在 C# 的 WinForm 应用程序中,使用 OpenCvSharp 实现图像的膨胀(Dilation)和腐蚀(Erosion)操作。

应用场景

膨胀(Dilation)

  1. 去噪
    • 在二值图像中,膨胀可以去除小黑点(噪声),因为膨胀会扩展白色区域,让孤立的小黑点被周围的白色覆盖。
  2. 增强对象的连接
    • 如果一个对象由于某些原因在图像中出现断裂,膨胀操作可以将其连接起来,使得后续的形态学或分割操作更加有效。
  3. 形态学梯度
    • 膨胀操作可以用来计算形态学梯度(梯度 = 膨胀结果 - 腐蚀结果),这种梯度图像可以用于边缘检测。
  4. 前景区域的粗略估计
    • 在某些分割任务中,通过膨胀操作可以大致估计前景区域,而不在意细节。

腐蚀(Erosion)

  1. 去除噪声
    • 在白噪声较多的情况下,腐蚀操作可以去除孤立的白点(噪声),因为腐蚀会缩小白色区域,使得孤立的小白点变为黑色。
  2. 分割物体
    • 在一些重叠的物体场景中,通过腐蚀操作可以将连接在一起的物体分开。之后可能还需要再进行一次膨胀操作,以修复形态。
  3. 边缘检测
    • 通过先腐蚀再膨胀或者其它形态学操作,可以明显突出图像对象的边缘,提供更准确的边缘信息。
  4. 形态学开运算(Opening)
    • 腐蚀操作和后续的膨胀共同进行开运算,主要用于去除小区域噪声而不改变形态特征。
  5. 形态学闭运算(Closing)
    • 结合膨胀操作和后续的腐蚀共同进行闭运算,主要用于填充小孔洞,连接近邻的对象。

膨胀和腐蚀结合的应用

  1. 形态学开运算(Opening)
    • 先进行腐蚀操作再进行膨胀操作,目的是去除图像中的小物体。开运算可以理解为:清除细小物体的干扰(先腐蚀),然后恢复被腐蚀削弱的主体结构(再膨胀)。
  2. 形态学闭运算(Closing)
    • 先进行膨胀操作再进行腐蚀操作,目的是填充图像中的小裂缝和孔洞。闭运算可以理解为:连接主体结构(先膨胀),然后去除外部噪声或干扰(再腐蚀)。
  3. 形态学梯度(Morphological Gradient)
    • 膨胀图像减去腐蚀图像,用于强调图像的边界区域。

环境设置

安装 OpenCvSharp

需要在项目中添加 OpenCvSharp 库。可以通过 NuGet 来安装:

  1. 在 Visual Studio 中打开你的项目。
  2. 右键点击解决方案并选择“管理 NuGet 程序包”。
  3. 在“浏览”界面中搜索 OpenCvSharp4,并点击“安装”。
  4. OpenCvSharp4.Extensions ,点击“安装”。
  5. OpenCvSharp4.runtime.win,点击“安装”。

创建 WinForm 项目

创建基础 WinForm

  1. 打开 Visual Studio,创建一个新的 WinForm 应用程序。
  2. 在设计视图中,添加以下控件:
    • 一个 Button 控件,命名为 btnLoadImage,文字设为“加载图像”
    • 一个 Button 控件,命名为 btnDilation,文字设为“膨胀”
    • 一个 Button 控件,命名为 btnErosion,文字设为“腐蚀”
    • 一个 PictureBox 控件,命名为 pic,用于显示图像。
  3. 在代码中添加必要的 using 语句:
C#
using System; using System.Windows.Forms; using OpenCvSharp; using OpenCvSharp.Extensions;

代码实现

实现图像加载

C#
private Mat sourceImage; // 用于存储加载的图像

首先实现从文件加载图像并在 PictureBox 中显示。

C#
private void btnLoadImage_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "Image Files|*.jpg;*.jpeg;*.png;*.bmp"; if (openFileDialog.ShowDialog() == DialogResult.OK) { sourceImage = Cv2.ImRead(openFileDialog.FileName, ImreadModes.Color); pic.Image = BitmapConverter.ToBitmap(sourceImage); } }

实现膨胀操作

接下来,实现图像的膨胀操作,并显示在 PictureBox 中。

C#
private void btnDilation_Click(object sender, EventArgs e) { if (sourceImage == null) { MessageBox.Show("请先加载图像!"); return; } Mat dilatedImage = new Mat(); // 定义结构元素 Mat element = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(5, 5)); // 膨胀操作 Cv2.Dilate(sourceImage, dilatedImage, element); pic.Image = BitmapConverter.ToBitmap(dilatedImage); }

实现腐蚀操作

最后,实现图像的腐蚀操作,并显示在 PictureBox 中。

C#
private void btnErosion_Click(object sender, EventArgs e) { if (sourceImage == null) { MessageBox.Show("请先加载图像!"); return; } Mat erodedImage = new Mat(); // 定义结构元素 Mat element = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(5, 5)); // 腐蚀操作 Cv2.Erode(sourceImage, erodedImage, element); pic.Image = BitmapConverter.ToBitmap(erodedImage); }

运行程序

运行你的 WinForm 程序。

点击“加载图像”按钮,选择一张图像。

image.png

点击“膨胀”按钮,查看膨胀后的图像效果。

image.png

点击“腐蚀”按钮,查看腐蚀后的图像效果。

image.png

通过以上步骤,可以在 C# WinForm 应用中方便地使用 OpenCvSharp 库实现图像的形态学处理操作。希望这篇文章对你在 C# WinForm 项目中使用 OpenCvSharp 有所帮助!

本文作者:rick

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!