编辑
2025-09-30
C#
00

OpenCvSharp 是 OpenCV 的 .NET 封装,使得我们能在 C# 中使用 OpenCV 提供的强大图像处理功能。本文将介绍如何使用 OpenCvSharp 实现边缘检测中的 Sobel 算子。

什么是 Sobel 算子?

Sobel 算子是一种常用的边缘检测方法,通过计算图像灰度值梯度的变化来检测边缘。它通常用两个卷积核分别计算水平方向(X 方向)和垂直方向(Y 方向)的梯度。

安装 OpenCvSharp

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

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

代码实现

下面,我们将通过一个完整的示例程序来演示如何在 C# 中使用 OpenCvSharp 和 Sobel 算子进行边缘检测。 我们将分以下几个步骤进行:

  1. 加载图像
  2. 灰度化处理
  3. 应用高斯模糊去除噪点
  4. 使用 Sobel 算子计算梯度
  5. 展示结果

1. 创建新项目

首先,创建一个新的 .NET 控制台项目:

2. 编写代码

接下来,在 Program.cs 中编写以下代码:

C#
using OpenCvSharp; namespace App6 { internal class Program { static void Main(string[] args) { // 加载图像 Mat src = Cv2.ImRead("0.jpg", ImreadModes.Color); if (src.Empty()) { Console.WriteLine("图像加载失败!"); return; } // 转换为灰度图 Mat gray = new Mat(); Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY); // 使用高斯模糊去除噪点 Mat blurred = new Mat(); Cv2.GaussianBlur(gray, blurred, new Size(3, 3), 0); // 计算梯度(X 方向和 Y 方向) Mat gradX = new Mat(); Mat gradY = new Mat(); Cv2.Sobel(blurred, gradX, MatType.CV_64F, 1, 0, ksize: 3); Cv2.Sobel(blurred, gradY, MatType.CV_64F, 0, 1, ksize: 3); // 计算梯度的幅值 Mat grad = new Mat(); Cv2.Magnitude(gradX, gradY, grad); // 归一化到 [0, 255] 区间,并转换为 8 位图像 Mat gradAbs = new Mat(); Cv2.ConvertScaleAbs(grad, gradAbs); // 显示结果 Cv2.ImShow("原始图像", src); Cv2.ImShow("灰度图", gray); Cv2.ImShow("Sobel 边缘检测", gradAbs); Cv2.WaitKey(); Cv2.DestroyAllWindows(); } } }

3. 运行程序

确保将 "0.jpg" 替换为你的实际图像路径,然后运行程序:

image.png

编辑
2025-09-30
C#
00

在这篇文章中,我们将介绍如何使用 C# 创建一个简单的 Worker Service 应用程序,并在 Centos上进行部署。Worker Service 是 .NET Core 提供的一个新模板,用于创建长期运行的后台服务应用程序。它特别适合用来处理各种后台任务,例如消息队列处理、日志处理等。

环境准备

在开始之前,请确保你的开发环境中已经安装了以下软件:

  • .NET SDK 6.0 或更高版本
  • Ubuntu 20.04 或更高版本(或其他兼容的 Linux 发行版)
  • Docker(用于容器化部署)

步骤一:创建 Worker Service 项目

首先,我们使用 Vs2022创建一个新的 Worker Service 项目。

image.png

编辑
2025-09-30
C#
00

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

应用场景

膨胀(Dilation)

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

在计算机视觉领域中,找到和分析图像中的轮廓(contours)是一个非常基础且重要的任务。轮廓可以帮助我们识别和处理图像中的对象。在本文中,我们将详细探讨如何使用 OpenCvSharp 库来找到图像中的轮廓并计算每个轮廓的面积。我们将使用一个完整的示例代码来解释整个流程。

准备工作

首先,我们需要确保已经安装了 OpenCvSharp。你可以通过 NuGet 包管理器来安装 OpenCvSharp4 和 OpenCvSharp4.runtime.win。

Bash
dotnet add package OpenCvSharp4 dotnet add package OpenCvSharp4.runtime.win
编辑
2025-09-30
MQ
00

随着工业自动化与信息技术的不断融合,实时数据采集与高效传输成为智能制造和工业物联网中的关键需求。在这一背景下,RabbitMQ作为一种成熟的开源消息中间件,凭借其灵活的交换机模型和高可靠性,正日益成为工业系统中实现异步消息传递的重要支撑技术。同时,PLC(可编程逻辑控制器)作为工业控制领域的核心设备,需要通过高效的数据管理与通信机制,将现场采集的数据传输到后端系统进行实时监测、分析与决策。本文旨在探讨RabbitMQ的核心概念、消息确认及持久化机制,并结合PLC数据采集系统架构实践,详细解析如何构建稳定、高效且高可靠性的工业数据传输系统。

RabbitMQ核心概念解析

RabbitMQ基于AMQP协议实现消息交换,具有以下几个基本核心概念,这些概念对于初学者深入理解RabbitMQ至关重要:

生产者(Producer)与消费者(Consumer)

  • 生产者:负责发送消息到RabbitMQ的消息中间件。生产者可以是各种应用程序或传感器数据采集模块,其主要职责在于将产生的数据通过RabbitMQ中间件传输到目标队列中。
  • 消费者:负责从队列中接收并处理消息。消费者确保传入的数据经过初步处理或存储后,能够提供给后续的业务逻辑模块进行进一步分析和决策。

队列(Queue)与交换机(Exchange)

  • 队列:作为数据的缓冲区,存储生产者发送的消息。队列中的消息会按顺序传递给消费者进行处理,但在高并发消费场景中,严格的FIFO顺序可能会受到多消费者并发处理的影响。
  • 交换机:用于接收来自生产者的消息并根据预先定义的路由规则将消息分发到相应的队列中。RabbitMQ支持的交换机类型主要包括:
    • 直连交换机(Direct):根据精确匹配的路由键分发消息,尤其适合单播消息传递。
    • 扇出交换机(Fanout):将接收到的消息广播给所有绑定的队列,适用于日志和广播场景。
    • 主题交换机(Topic):基于模糊匹配规则进行消息路由,允许使用通配符匹配复杂的路由键。
    • 标头交换机(Headers):根据消息头的属性进行路由,适用于复杂的多属性匹配情形。