文章目录

  • 一、前文
  • 二、算法流程
  • 三、界面布局
  • 四、功能实现
    • 4.1 打开图片
    • 4.2 HoughLinesP直线提取—源码
    • 4.3 HoughLinesP直线提取—参数讲解
  • 五、运行效果图
  • 六、参考

一、前文

Hough变换
经典的直线检测算法

二、算法流程

  1. 高斯模糊
  2. Canny边缘检测
  3. HoughLinesP直线寻找,直线提取

三、界面布局

  • 一个Label
  • N个Button
  • 三个Picture

四、功能实现

4.1 打开图片

 private void openFileBtn_Click(object sender, EventArgs e){OpenFileDialog openfiledialog = new OpenFileDialog();openfiledialog.Filter = "PNG Files (*.png)|*.png|JPG Files (*.jpg)|*.jpg|GIF Files (*.gif)|*.gif";openfiledialog.RestoreDirectory = true;if (openfiledialog.ShowDialog() == DialogResult.OK){Console.WriteLine(openfiledialog.FileName);fileName = openfiledialog.FileName;//Mat src = new Mat("foo.png", LoadMode.Color);Mat src = new Mat(fileName);//Mat src = new Mat(fileName, ImreadModes.Color);var frameBitmap = BitmapConverter.ToBitmap(src);pictureBox1.Image?.Dispose();pictureBox1.Image = frameBitmap;}}

4.2 HoughLinesP直线提取—源码

private void houghLinesBtn_Click(object sender, EventArgs e)
{cannyBtn_Click(sender, e);mOutput = new Mat(mInput.Rows, mInput.Cols, MatType.CV_8UC4);mInput.CopyTo(mOutput);double rho = 1;double theta = 1;int threshold = 10;double minLineLength = 0;double maxLineGap = 0;var res = Cv2.HoughLinesP(edges,rho: rho,theta: theta / 100.0,threshold: threshold,minLineLength: minLineLength,maxLineGap: maxLineGap);for (int i = 0; i < res.Length; i++){Scalar color = Scalar.RandomColor();Cv2.Line(mOutput, res[i].P1, res[i].P2,color: color,thickness: 2,lineType: LineTypes.Link8);}srcPictureBox.Image = BitmapConverter.ToBitmap(mInput);grayPictureBox.Image = BitmapConverter.ToBitmap(edges);dstPictureBox.Image = BitmapConverter.ToBitmap(mOutput);
}

4.3 HoughLinesP直线提取—参数讲解

//
// 摘要:
//     Finds lines segments in a binary image using probabilistic Hough transform.
//
// 参数:
//   image:
//
//   rho:
//     Distance resolution of the accumulator in pixels
//
//   theta:
//     Angle resolution of the accumulator in radians
//
//   threshold:
//     The accumulator threshold parameter. Only those lines are returned that get enough
//     votes ( > threshold )
//
//   minLineLength:
//     The minimum line length. Line segments shorter than that will be rejected. [By
//     default this is 0]
//
//   maxLineGap:
//     The maximum allowed gap between points on the same line to link them. [By default
//     this is 0]
//
// 返回结果:
//     The output lines. Each line is represented by a 4-element vector (x1, y1, x2,
//     y2)
public static LineSegmentPoint[] HoughLinesP(InputArray image, double rho, double theta, int threshold, double minLineLength = 0, double maxLineGap = 0);
  • image,灰度图片输入
  • rho,步长为1的半径
  • theta,步长为π/180的角来,来搜索所有可能的直线
  • threshold,阈值,大于阈值 threshold 的线段才可以被确认为直线。该值越小,判定出的直线越多;值越大,判定出的直线就越少。
  • minLineLength,线段的最短长度,长度小于该值的线段会被忽略
  • maxLineGap,两条线段之间的最大间隔,间隔小于该值的两条线会被当成一条线

五、运行效果图

从左到右

  • 第一张是原图
  • 第二张是高斯模糊的结果图
  • 第三张是HoughLinesP直线提取的结果图


六、参考

OpenCV—直线检测

觉得好,就一键三连呗(点赞+收藏+关注)

OpenCVSharp入门教程 特征提取③——HoughLinesP直线寻找,直线提取相关推荐

  1. OpenCVSharp入门教程 特征提取①——MSER区域特征提取Maximally Stable Extremal Regions

    文章目录 一.前文 二.特征提取流程 三.界面布局 四.功能实现 4.1 打开图片 4.2 特征提取-源码 4.3 特征提取-参数讲解 4.4 特征提取-Detect和DetectRegions 五. ...

  2. OpenCVSharp入门教程——导读

    文章目录 一.基础篇 二.特征提取 一.基础篇 OpenCVSharp入门教程 基础篇①--通过NuGet安装OpenCVSharp库 OpenCVSharp入门教程 基础篇②--获得图片像素及数据转 ...

  3. OpenCVSharp入门教程 基础篇⑤——GaussianBlur高斯模糊算法

    文章目录 一.前文 二.GaussianBlur高斯模糊算法流程 三.界面布局 四.功能实现 4.1 打开图片 4.2 GaussianBlur高斯模糊-源码 4.3 GaussianBlur高斯模糊 ...

  4. 宏宇社:国外lead入门教程(二)如何寻找任务联盟申请账号

    宏宇社:国外lead入门教程(二)如何寻找任务联盟申请账号 宏宇社:如何寻找任务联盟申请账号 国外的广告联盟是非常多的,你只需要在Google上用任务关键词+affiliate搜索,会有很多结果. 比 ...

  5. 【MATLAB Image Processing Toolbox 入门教程三】快速入门之“在多光谱图像中寻找植被”

    [MATLAB Image Processing Toolbox 入门教程三] 本篇摘要 一.从多光谱图像文件导入彩色红外通道 二.构建近红外光谱散射图 三.计算植被系数并显示其定位 四.综合实例部分 ...

  6. 【OpenCV入门教程之十四】OpenCV霍夫变换:霍夫线变换,霍夫圆变换合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/26977557 作者:毛星云(浅墨) ...

  7. 写给运营同学和初学者的SQL入门教程

    作者简介 多肉,饿了么资深python工程师.曾在17年担任饿了么即时配送众包系统的研发经理,这篇文章最早的版本就诞生于那段时间,目前负责配送相关业务系统的整体稳定性建设.个人比较喜欢c和python ...

  8. Python 数据科学入门教程:机器学习:回归

    Python 数据科学入门教程:机器学习:回归 原文:Regression - Intro and Data 译者:飞龙 协议:CC BY-NC-SA 4.0 引言和数据 欢迎阅读 Python 机器 ...

  9. 超详细 redis入门教程

    redis入门教程 [root@localhost redis-5.0.8]# redis-cli -p 6379 #使用redis客户端进行连接 127.0.0.1:6379> auth ro ...

最新文章

  1. Java网页数据采集器[下篇-数据查询]【转载】
  2. jquery计算表格列,求和
  3. 完全命令行.NET开发
  4. 实用场景解析:那些漂亮的可视化图表都是如何做的?
  5. #pragma once与#ifndef的区别?
  6. SEO十心要诀 细节决定成败
  7. 基于ssm的个人博客_基于 CentOS7 搭建 WordPress 个人博客
  8. matplotlib的基本使用1
  9. 常量数组 python_python数据科学系列:numpy入门详解教程
  10. 收藏 | 深度学习pytorch训练代码
  11. SEO长尾理论,关键词需求覆盖理论
  12. 如何计算加权和及矩阵乘法运算回顾
  13. c语言单片机编程 实例教程,51单片机的C语言编程基础及实例教程
  14. 基于IIS Live Smooth Streaming技术流媒体直播系统
  15. 微信小视频显示服务器正在升级,更新微信版本后 朋友圈小视频提示显示录制时间太短的解决办法...
  16. PANTONE 色号
  17. 【方法】Latex使用BibTeX生成参考文献列表
  18. 模块电路选型(7)----人机交互模块
  19. sqlserver 中时间转变为coledatetime,再到systemtime
  20. linux ntpdate

热门文章

  1. MStar平台编译环境安装
  2. C# Basler相机采集图像
  3. VS2008+VP5开发环境配置
  4. 星环研发总监为你揭秘TDH8.0的前因后果 | TDH8.0 使用必读 3
  5. unity如何改变重力方向
  6. [转帖]奋斗5年 从月薪3500到700万!
  7. 极简 ssh之 scp
  8. 徐州泰奇妙机器人编程教育_机器人和STEM编程教育,帮助自闭症儿童重归社会...
  9. linux trac git,trac安装、配置、中文化、支持git(Linux,Mac)
  10. c语言无符号整型除法,用位运算的方法实现无符号整数的除法,游戏编程 | 李大仁博客...