编辑
2025-09-25
C#
00

目录

安装 OpenCvSharp
基本概念
使用 HoughLines 检测直线
示例代码
代码要点
用于车道检测的直线检测
结论

OpenCvSharp 是 OpenCV 库的 .NET 封装,使开发者能够在 C# 中使用 OpenCV 的强大功能。其中,直线检测是一个常见的计算机视觉任务,可以用于车道检测、几何分析等多种应用。本文将详细介绍如何使用 OpenCvSharp 在图像中进行直线检测,并提供多个示例代码。

安装 OpenCvSharp

在开始之前,你需要确保在项目中安装 OpenCvSharp 库。你可以通过 NuGet 包管理器安装:

PowerShell
Install-Package OpenCvSharp4 Install-Package OpenCvSharp4.runtime.win

基本概念

在进行直线检测时,最常用的算法是 Hough 变换(Hough Transform)。OpenCvSharp 提供了两种 Hough 变换方法:

  1. HoughLines: 检测参数化空间中的直线。
  2. HoughLinesP: 检测端点的概率直线(常称为面向短线的 Hough 变换)。

使用 HoughLines 检测直线

HoughLines 方法用于从二值图像中检测直线。通常需要先对图像进行边缘检测,如使用 Canny 边缘检测。

示例代码

C#
static void Main(string[] args) { // 读取图像 Mat src = Cv2.ImRead("example.png", ImreadModes.Grayscale); // 使用 Canny 进行边缘检测 Mat edges = new Mat(); Cv2.Canny(src, edges, 50, 150); // 使用 HoughLinesP 函数,设置最小线段长度为100,并设置最大间隙为10 LineSegmentPoint[] linesP = Cv2.HoughLinesP(edges, 1, Cv2.PI / 180, 50, minLineLength: 100, maxLineGap: 10); // 创建结果图像 Mat result = new Mat(); Cv2.CvtColor(edges, result, ColorConversionCodes.GRAY2BGR); // 绘制检测到的线段 foreach (var line in linesP) { Cv2.Line(result, line.P1, line.P2, Scalar.Red, 2); } // 显示结果图像 Cv2.ImShow("Detected Line Segments", result); Cv2.WaitKey(0); }

image.png

代码要点

  • Canny 边缘检测: 首先对图像进行边缘检测,为后续的直线检测提供输入。
  • HoughLinesP: 使用概率霍夫变换,这允许你指定 minLineLength 以过滤掉较短的线段。
    • minLineLength: 所需的最小线段长度。如指定为 100,只检测长度超过 100 个像素的线段。
    • maxLineGap: 同一直线上两点之间允许的最大间隙。

用于车道检测的直线检测

C#
static void Main(string[] args) { // 读取图像 Mat src = Cv2.ImRead("example.png"); // 转换为灰度图像 Mat gray = new Mat(); Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY); // 使用高斯滤波减少噪声 Mat blurred = new Mat(); Cv2.GaussianBlur(gray, blurred, new Size(5, 5), 1.5); // 使用 Canny 进行边缘检测 Mat edges = new Mat(); Cv2.Canny(blurred, edges, 50, 150); // 使用 HoughLinesP 检测直线 LineSegmentPoint[] lines = Cv2.HoughLinesP(edges, 1, Math.PI / 180, 50, minLineLength: 50, maxLineGap: 10); // 绘制检测到的线段 foreach (var line in lines) { Cv2.Line(src, line.P1, line.P2, Scalar.Yellow, 3); } // 显示结果 Cv2.ImShow("Lane Lines", src); Cv2.WaitKey(0); Cv2.DestroyAllWindows(); }

image.png

结论

通过本文,你应该能够在 C# 中使用 OpenCvSharp 执行基本的直线检测。Hough 变换是一个强有力的工具,允许对多种图像生成几何信息。为了提高检测精度,可能需要根据不同图像特点微调参数。希望这些示例代码能帮助你在项目中成功应用直线检测技术。

使用 OpenCvSharp 进行直线检测

本文作者:技术老小子

本文链接:

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