编辑
2025-11-17
C#
00

在本文中,我们将探讨如何使用OpenCvSharp库在C#的WinForms应用程序中实现轮廓匹配功能。轮廓匹配是计算机视觉中的一项重要技术,可用于识别和定位图像中的特定形状或物体。

应用程序概述

我们的WinForms应用程序允许用户选择两张图片:一张源图像和一张模板图像。程序会在源图像中查找与模板图像最相似的轮廓,并在结果图像中高亮显示匹配的轮廓。

主要功能包括:

  1. 选择源图像和模板图像
  2. 显示选择的图像
  3. 执行轮廓匹配
  4. 显示匹配结果和相似度

实现细节

image.png

1. 图像选择

编辑
2025-11-17
C#
00

模板匹配是计算机视觉中一种常用的图像处理技术,用于在大图像中查找与模板图像相似的区域。本文将介绍如何使用 OpenCvSharp 库在 C# WinForms 应用程序中实现模板匹配功能。

1. 项目概述

我们将创建一个 WinForms 应用程序,允许用户选择源图像和模板图像,然后执行模板匹配操作。应用程序将显示匹配结果,包括在源图像上标记匹配位置和显示匹配置信度。

2. 环境设置

首先,确保您的项目中已安装以下 NuGet 包:

  • OpenCvSharp4
  • OpenCvSharp4.runtime.win
  • OpenCvSharp4.Extensions (这里有可能需要更新新的System.Drawing.Common)

3. 用户界面设计

image.png

编辑
2025-11-17
C#
00

简介

轮廓检测是计算机视觉中的一项基本技术,用于识别图像中物体的边界。在OpenCvSharp中,我们可以使用多种方法来实现轮廓检测。本文将详细介绍如何使用OpenCvSharp进行轮廓检测,并提供多个实际示例。

基本概念

在OpenCvSharp中,轮廓是由图像中连续的点(边界点)组成的曲线,代表物体的形状。轮廓检测通常在二值图像上进行,因此在检测之前,我们通常需要对图像进行预处理。

轮廓检测的基本步骤

  1. 图像预处理(灰度化、二值化)
  2. 边缘检测
  3. 轮廓查找
  4. 轮廓分析和绘制

让我们通过代码示例来详细了解每个步骤。

代码示例

1. 基本轮廓检测

C#
using OpenCvSharp; using System; using System.Linq; class Program { static void Main() { // 读取图像 using var src = new Mat("1.jpg", ImreadModes.Color); using var gray = new Mat(); using var binary = new Mat(); // 转换为灰度图像 Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY); // 应用高斯模糊以减少噪声 Cv2.GaussianBlur(gray, gray, new Size(5, 5), 0); // 使用自适应阈值进行二值化 Cv2.AdaptiveThreshold(gray, binary, 255, AdaptiveThresholdTypes.GaussianC, ThresholdTypes.Binary, 11, 2); // 查找轮廓 Point[][] contours; HierarchyIndex[] hierarchy; Cv2.FindContours(binary, out contours, out hierarchy, RetrievalModes.Tree, ContourApproximationModes.ApproxSimple); // 创建src的副本用于绘制轮廓 using var result = src.Clone(); // 绘制轮廓 for (int i = 0; i < contours.Length; i++) { // 只绘制面积大于某个阈值的轮廓 if (Cv2.ContourArea(contours[i]) > 100) { Cv2.DrawContours(result, contours, i, Scalar.RandomColor(), 2); } } // 显示结果 Cv2.ImShow("Contours", result); Cv2.WaitKey(0); } }

image.png

编辑
2025-11-16
C#
00

腐蚀是图像处理中的一种基本形态学操作,在文本分割中有着重要应用。本文将详细介绍如何使用OpenCvSharp库在C#中实现腐蚀操作,并通过多个例子展示其在文本分割中的应用。

1. 基本概念

腐蚀操作的基本思想是将图像中的物体边界腐蚀掉,即缩小前景物体的面积。在文本图像中,这可以帮助我们分离相连的字符或去除小的噪点。

2. OpenCvSharp中的腐蚀操作

在OpenCvSharp中,我们主要使用Cv2.Erode()方法来进行腐蚀操作。以下是该方法的基本语法:

C#
Cv2.Erode(InputArray src, OutputArray dst, InputArray kernel, Point? anchor = null, int iterations = 1, BorderTypes borderType = BorderTypes.Constant, Scalar? borderValue = null)

参数说明:

  • src: 输入图像
  • dst: 输出图像
  • kernel: 腐蚀操作的核(结构元素)
  • anchor: 锚点,默认为核的中心
  • iterations: 腐蚀的次数
  • borderType: 边界类型
  • borderValue: 边界值

3. 实例: 基本腐蚀操作

让我们从一个简单的例子开始,展示如何对文本图像进行基本的腐蚀操作:

C#
static void Main(string[] args) { // 读取图像 Mat image = Cv2.ImRead("011eaae7b2c300b05a_b.jpg", ImreadModes.Grayscale); if (image.Empty()) { Console.WriteLine("无法加载图像!"); return; } // 创建结构元素 using var kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(3, 3)); using var dst = new Mat(); // 进行腐蚀操作 Cv2.Erode(image, dst, kernel, iterations: 1); using (new Window("原始图像", image)) using (new Window("腐蚀后", dst)) { Cv2.WaitKey(); } }

image.png

编辑
2025-11-16
C#
00

1. 腐蚀简介

腐蚀(Erosion)是计算机视觉和图像处理中的一种基本形态学操作。在OpenCvSharp中,腐蚀操作可以轻松实现。其主要作用是"收缩"或"细化"图像中的前景对象。

2. 应用场景

腐蚀操作在图像处理中有多种实际应用:

  1. 去除小物体和噪声
    • 用途:消除图像中的小斑点或噪声。
    • 场景:清理扫描文档中的污点或降低数字图像中的噪声。
  2. 分离连接对象
    • 用途:分离通过细小连接处相连的物体。
    • 场景:字符识别中分离相连的字符,或在医学图像中分离相邻的细胞。
  3. 边缘检测
    • 用途:与膨胀操作结合,用于图像的边缘检测。
    • 场景:在工业视觉中检测物体边缘,或在地理信息系统中识别地形边界。
  4. 图像细化
    • 用途:减少前景对象的粗细。
    • 场景:简化复杂图形,如指纹识别中的脊线细化。
  5. 特征提取
    • 用途:突出显示图像中的某些特征。
    • 场景:在医学图像分析中突出显示血管结构。
  6. 图像预处理
    • 用途:作为复杂图像分析任务的预处理步骤。
    • 场景:在机器学习模型训练前简化输入图像。

3. 基本操作

在C# OpenCvSharp中,腐蚀操作主要通过Cv2.Erode()方法实现。以下是一个基本的操作示例:

C#
static void Main(string[] args) { // 读取图像 Mat image = Cv2.ImRead("coip.jpg"); if (image.Empty()) { Console.WriteLine("无法加载图像!"); return; } // 创建结构元素(核) using Mat kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(3, 3)); // 应用腐蚀 using Mat dst = new Mat(); Cv2.Erode(image, dst, kernel); using (new Window("原始图像", image)) using (new Window("腐蚀后", dst)) { Cv2.WaitKey(); } }

image.png