编辑
2025-09-26
C#
00

目录

环境设置
安装OpenCvSharp4
创建WinForms项目
设计界面
编写代码
运行程序

在这篇文章中,我们将讨论如何在WinForms应用程序中使用OpenCvSharp库创建和应用图像遮罩。OpenCvSharp是一个.NET平台上的OpenCV封装,可以很方便地进行计算机视觉操作。

环境设置

在开始之前,请确保你已经安装以下软件和库:

  1. Visual Studio 或其他支持C#开发的IDE
  2. .NET Framework(建议4 或以上),我这里用的是.Net 6
  3. OpenCvSharp4库

安装OpenCvSharp4

你可以通过NuGet包管理器安装OpenCvSharp4库。在Visual Studio中,右键点击你的项目,选择“管理NuGet包”,然后搜索OpenCvSharp4并安装。你至少需要安装以下包:

  • OpenCvSharp4
  • OpenCvSharp4.runtime.win
  • OpenCvSharp4.Extensions

创建WinForms项目

首先,新建一个WinForms项目。我们将添加一个按钮来加载图像、另一个按钮来应用遮罩,并使用一个PictureBox控件来显示结果。

设计界面

在设计视图中,添加以下控件:

  1. 一个 Button (Name: btnLoadPicture, Text: "Load Image")
  2. 一个 Button (Name: btnMask, Text: "Apply Mask")
  3. 一个 PictureBox (Name: pic, SizeMode: PictureBoxSizeMode.Zoom)

编写代码

双击btnLoadPicturebtnMask按钮,分别添加Click事件处理代码。然后在你的Form代码中,添加以下代码:

C#
using OpenCvSharp; using OpenCvSharp.Extensions; using System.Windows.Forms; using Point = OpenCvSharp.Point; namespace App2 { public partial class Form1 : Form { private Mat originalImage; private Mat maskedImage; public Form1() { InitializeComponent(); } private void btnLoadPicture_Click(object sender, EventArgs e) { using (OpenFileDialog openFileDialog = new OpenFileDialog()) { openFileDialog.Filter = "Image Files|*.jpg;*.jpeg;*.png;*.bmp"; if (openFileDialog.ShowDialog() == DialogResult.OK) { originalImage = Cv2.ImRead(openFileDialog.FileName); pic.Image = BitmapConverter.ToBitmap(originalImage); } } } private void btnMask_Click(object sender, EventArgs e) { if (originalImage == null) { MessageBox.Show("请先加载一张图像。"); return; } // 创建带有 alpha 通道的遮罩图像 (4 通道:BGR + Alpha) Mat mask = new Mat(originalImage.Size(), MatType.CV_8UC4, new Scalar(0, 0, 0, 0)); // 定义矩形遮罩区域,并设置透明度为50% (ARGB 格式) Cv2.Rectangle(mask, new Rect(50, 50, 200, 200), new Scalar(255, 255, 255, 127), -1); // 定义圆形遮罩区域,并设置透明度为50% Cv2.Circle(mask, new Point(300, 300), 100, new Scalar(255, 255, 255, 127), -1); // 定义三角形遮罩区域,并设置透明度为50% Point[] points = new Point[] { new Point(500, 100), new Point(450, 200), new Point(550, 200) }; Cv2.FillConvexPoly(mask, points, new Scalar(255, 255, 255, 127)); // 将原始图像转换为 4 通道 (BGRA) Mat originalImageWithAlpha = new Mat(); Cv2.CvtColor(originalImage, originalImageWithAlpha, ColorConversionCodes.BGR2BGRA); // 将原始图像与遮罩图像进行混合 maskedImage = new Mat(); Cv2.AddWeighted(originalImageWithAlpha, 1.0, mask, 0.5, 0, maskedImage); // 显示处理后的图像 pic.Image = BitmapConverter.ToBitmap(maskedImage); } } }

运行程序

编译并运行项目。点击“载入图片”按钮选择一张图像,然后点击“遮罩”按钮,你会看到图像指定区域被遮罩后的效果。

image.png

以上就是在WinForms应用程序中使用OpenCvSharp库实现图像遮罩的完整案例。这个示例只是遮罩应用的一个基本介绍,OpenCvSharp提供了大量强大的功能,可以用于更复杂的图像处理任务。希望这篇文章对你有帮助!

本文作者:技术老小子

本文链接:

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