【C++】【Opencv】霍夫直线检测即cv::HoughLinesP()函数详解和示例

cv::HoughLinesP()(函数霍夫直线)功能分析是一种用于检测图像中直线的算法,它基于霍夫变换的原理。通过该算法,我们可以从图像中提取出直线信息,从而对图像进行分析和处理。主要经理边缘检测和霍夫直线处理两个步骤。本文通过示例对该函数进行详细解读,以帮助大家理解和使用。

目录

  • 函数原理
    • 原理
    • cv::HoughLinesP()函数
  • 运行示例
    • 阈值为80
    • 阈值为200
  • 总结

函数原理

原理

霍夫直线检测(Hough Line Detection)是一种用于检测图像中直线的算法。它基于一个简单的事实:直线在图像中表现为一系列的点,这些点在霍夫空间中表现为峰值。
在实现霍夫直线检测时,通常分为两个步骤:

(1)边缘检测:首先对图像进行边缘检测,以获取所有可能形成直线的像素点。边缘检测可以通过各种算法(如Canny算法)来实现。Canny检测的介绍请参照canny详解和示例博客
(2)霍夫变换:然后对这些边缘像素点进行霍夫变换。霍夫变换的基本思想是将每个边缘像素点的梯度和角度映射到霍夫空间中。在霍夫空间中,每个可能的直线参数(斜率和截距)对应一个投票桶。如果一个边缘像素点对应的梯度和角度落在两个投票桶的边界上,则该像素点会给两个投票桶各投一票。最后,找到投票数最多的投票桶,其对应的直线参数即为检测到的直线。

cv::HoughLinesP()函数

cv::HoughLinesP() 是 OpenCV 库中的一个函数,用于在图像中检测和绘制线段。它基于霍夫变换(Hough Transform)的原理,通过检测图像中的边缘来识别线段。
函数原型:

void cv::HoughLinesP(InputArray image,OutputArray lines,double rho,double theta,int threshold,double minLineLength = 0,double maxLineGap = 0
);参数解释:
image:输入的二值图像,通常是由边缘检测算法(如 Canny)得到的图像。
lines:输出参数,存储检测到的线段的端点信息。返回的是 N 个线段的向量,每个线段由两个点的向量构成。
rho:霍夫空间中坐标的分辨率,通常设置为1。
theta:角度的分辨率,通常设置为π/180。
threshold:判定直线点数量的阈值,阈值越高,检测到的线段越少。
minLineLength:线段的最小长度,小于此值的线段将被拒绝。默认值为0,表示不进行此检查。
maxLineGap:最大允许的线段间距,以使它们被视为单一线段。默认值为0,表示不进行此检查。

运行示例

由上面的介绍可知,threshold的设置关系着检测到线段的多少,因此,本部分将阈值分别设置为80和200进行对比实验。其中,使用的图像和代码均一致,进改变阈值参数值。图像原图为:
在这里插入图片描述

阈值为80

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main() {Mat image = imread("tiegui.jpg", IMREAD_COLOR); // 读取输入图像Mat gray_image; cvtColor(image, gray_image, COLOR_BGR2GRAY); // 转换为灰度图像Mat edges_image; Canny(gray_image, edges_image, 100, 200); // 应用Canny边缘检测算法vector<Vec4i> lines; // 存储检测到的直线HoughLinesP(edges_image, lines, 1, CV_PI / 180, 80, 30, 10); // 应用霍夫直线检测算法for (size_t i = 0; i < lines.size(); i++){Vec4i l = lines[i];line(image, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0, 0, 255), 3, LINE_AA);}imshow("Edges", edges_image); // 显示检测到的边缘图像imwrite("tieguicanny.jpg", edges_image);imshow("Lines", image); // 显示检测到的直线imwrite("huofuline.jpg", image);waitKey(0); // 等待按键return 0;
}

在这个示例中,我们首先读取输入图像为灰度图,并使用 Canny 算法进行边缘检测。然后,我们使用 cv::HoughLinesP() 函数来检测边缘图像中的线段,并将检测到的线段存储在 lines 向量中。最后,我们遍历这个向量,并使用 cv::line() 函数在原始图像上画出检测到的线段,并保存相应的图像。
在这里插入图片描述
上图为Canny边缘检测结果。下图为霍夫直线cv::HoughLinesP()函数运处理结果。在这里插入图片描述

阈值为200

此部分,将代码中的80改变为200,相应的最终结果为:
在这里插入图片描述

总结

在霍夫直线功能分析中,我们可以通过设置不同的阈值和参数来控制检测直线的精度和鲁棒性。例如,我们可以调整投票机制中的阈值来控制检测到的直线数量。此外,我们还可以通过使用不同的边缘检测算法来影响检测结果的质量。
总的来说,霍夫直线功能分析是一种非常有用的算法,它可以用于各种应用场景中,如目标检测、机器人导航、交通监控等。通过该算法,我们可以从图像中提取出直线的信息,从而对图像进行分析和处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/196068.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EDA实验-----4*4矩阵键盘与数码管显示测试(Quartus ‖)

目录 一、实验目的 二、实验仪器设备 三、实验原理 四、实验要求 五、实验步骤 六、实验报告 七、实验过程 1.矩阵键盘按键原理 2.数码管原理 3.分频器代码 4.电路图连接 5.文件烧录 一、实验目的 了解数码管的工作原理&#xff1b;掌握4*4矩阵键盘和数码管显示的编…

[python]python筛选excel表格信息并保存到另一个excel

目录 关键词平台说明背景所需库1.安装相关库2.代码实现sourcetarget1 关键词 python、excel、DBC、openpyxl 平台说明 项目Valuepython版本3.6 背景 从一个excel表中遍历删选信息并保存到另一个excel表 所需库 1.openpyxl &#xff1a;是一个用于读写 Excel 文件的 Pyt…

C/C++统计数 2021年12月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C统计数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C统计数 2021年12月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 给定一个数的序列S&#xff0c;以及一个区间[L, R], 求序列…

【C++入门到精通】新的类功能 | 可变参数模板 C++11 [ C++入门 ]

阅读导航 引言一、新的类功能1. 默认成员函数2. 类成员变量初始化3. 强制生成默认函数的关键字default4. 禁止生成默认函数的关键字delete5. override 和 final&#xff08;1&#xff09;override&#xff08;2&#xff09;final 二、可变参数模板递归函数方式展开参数包逗号表…

【c++随笔13】多态

【c随笔13】多态 多态性&#xff08;Polymorphism&#xff09;在面向对象编程中是一个重要概念&#xff0c;它允许以统一的方式处理不同类型的对象&#xff0c;并在运行时动态确定实际执行的方法或函数。一、什么是多态性&#xff1f;1、关键概念&#xff1a;C的多态性2、多态定…

3-docker安装centos7

CentOS7.9下安装完成docker后&#xff0c;后续我们可以在其上安装centos7系统。具体操作如下&#xff1a; 1.以root用户登录CentOS7.9服务器&#xff0c;拉取centos7 images 命令&#xff1a; docker pull centos:centos7 2.加载centos7 images并登录验证 命令&#xff1a;…

一种用于脑肿瘤和组织分割的具有体积特征对齐的三维跨模态特征交互网络

A 3D Cross-Modality Feature Interaction Network With Volumetric Feature Alignment for Brain Tumor and Tissue Segmentation 一种用于脑肿瘤和组织分割的具有体积特征对齐的三维跨模态特征交互网络背景贡献实验方法Cross-Modality Feature Interaction ModuleVolumetric …

【面试经典150 | 算术平方根】

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;数学表达式方法二&#xff1a;二分法 其他语言python3 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并…

树,二叉树,二叉树遍历,哈夫曼树(详解+刷题)

&#x1f442; 后街男孩经典之精选 - 歌单 - 网易云音乐 &#x1f442; 年轮&#xff08;电视剧《花千骨》男声版插曲&#xff09; - 汪苏泷 - 单曲 - 网易云音乐 目录 &#x1f33c;5.1 -- 树 &#x1f33c;5.2 -- 二叉树 1&#xff0c;性质 2&#xff0c;存储 3&#x…

Figma 插件学习(一)

一.插件介绍 插件在文件中运行&#xff0c;执行一个或多个用户操作&#xff0c;并允许用户自定义其体验或创建更高效的工作流程。 插件通过专用插件API与Figma的编辑器交互。还可以利用外部Web API。 1.插件API 插件API支持读写功能&#xff0c;允许查看、创建和修改文件的…

开源WIFI继电器之硬件电路

一、原理图 源文件 二、原理图说明 1、器件说明 U4&#xff1a;ESP8285模块 U6&#xff1a;触发器 U3&#xff1a;继电器 2、继电器状态检测说明 检测继电器线圈是否通电来判断继电器是否导通&#xff0c;当Q1不导通时&#xff0c;Q1集电极的电压为3.3V&#xff0c;经…

【项目管理】中途接手的项目应对实用指南

导读&#xff1a;作为项目经理中途接手项目往往不可避免&#xff0c;为了保证项目成功需要项目经理额外考虑更多的因素和处理相关问题&#xff0c;也往往带来很大的挑战性。本文提供可应对借鉴的思路&#xff0c;在一定程度上可以作为最佳实践。 目录 1、首先、了解项目项目背…