OpenCV特征检测(9)检测图像中直线的函数HoughLines()的使用

news2024/9/29 16:30:10
  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

在二值图像中使用标准 Hough 变换查找直线。

该函数实现了用于直线检测的标准 Hough 变换或标准多尺度 Hough 变换算法。详见 http://homepages.inf.ed.ac.uk/rbf/HIPR2/hough.htm 对 Hough 变换的详细解释。

HoughLines 是 OpenCV 中用于检测图像中直线的一个函数。它利用 Hough 变换来识别图像中的直线。Hough 变换是一种将图像中的直线问题转化为参数空间中的点积累问题的技术。通过这种方式,即使直线片段在原始图像中是断断续续的,也可以检测出来。

函数原型


void cv::HoughLines	
(
	InputArray 	image,
	OutputArray 	lines,
	double 	rho,
	double 	theta,
	int 	threshold,
	double 	srn = 0,
	double 	stn = 0,
	double 	min_theta = 0,
	double 	max_theta = CV_PI 
)		

参数

  • 参数image: 8 位单通道二值源图像。该图像可能在函数执行过程中被修改。

  • 参数lines: 输出的直线向量。每条直线由一个包含 2 或 3 个元素的向量表示(ρ, θ)或(ρ, θ, votes),其中 ρ 是从坐标原点(0,0)(图像的左上角)到直线的距离,θ 是直线旋转角度(以弧度为单位,0~垂直线,π/2~水平线),votes 是累加器的值。

  • 参数rho: 累加器的距离分辨率(以像素为单位)。

  • 参数theta: 累加器的角度分辨率(以弧度为单位)。

  • 参数threshold: 累加器的阈值参数。只有那些获得足够投票数(>threshold)的直线才会被返回。

  • 参数srn: 对于多尺度 Hough 变换,它是距离分辨率 ρ 的除数。粗略累加器的距离分辨率为 ρ,而精确累加器的分辨率为 ρ/srn。如果 srn=0 和 stn=0,将使用经典 Hough 变换。否则,这两个参数都应该为正数。

  • 参数stn: 对于多尺度 Hough 变换,它是角度分辨率 θ 的除数。

  • 参数min_theta: 对于标准 Hough 变换和多尺度 Hough 变换,检查直线的最小角度。必须介于 0 和 max_theta 之间。

  • 参数max_theta: 对于标准 Hough 变换和多尺度 Hough 变换,角度的上限。必须介于 min_theta 和 CV_PI 之间。累加器中的实际最大角度可能稍微小于 max_theta,具体取决于 min_theta 和 theta 参数。

代码示例


#include "opencv2/highgui.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/imgproc.hpp"
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
    // Declare the output variables
    Mat dst, cdst, cdstP;
    const char* default_file = "sudoku.png";
   
    // Loads an image
    Mat src = imread( "/media/dingxin/data/study/OpenCV/sources/images/line.jpg", IMREAD_GRAYSCALE );
    // Check if image is loaded fine
    if ( src.empty() )
    {
        printf( " Error opening image\n" );
        printf( " Program Arguments: [image_name -- default %s] \n", default_file );
        return -1;
    }
    // Edge detection
    Canny( src, dst, 50, 200, 3 );
    // Copy edges to the images that will display the results in BGR
    cvtColor( dst, cdst, COLOR_GRAY2BGR );
    cdstP = cdst.clone();
    // Standard Hough Line Transform
    vector< Vec2f > lines;                                // will hold the results of the detection
    HoughLines( dst, lines, 1, CV_PI / 180, 150, 0, 0 );  // runs the actual detection
    // Draw the lines
    for ( size_t i = 0; i < lines.size(); i++ )
    {
        float rho = lines[ i ][ 0 ], theta = lines[ i ][ 1 ];
        Point pt1, pt2;
        double a = cos( theta ), b = sin( theta );
        double x0 = a * rho, y0 = b * rho;
        pt1.x = cvRound( x0 + 1000 * ( -b ) );
        pt1.y = cvRound( y0 + 1000 * ( a ) );
        pt2.x = cvRound( x0 - 1000 * ( -b ) );
        pt2.y = cvRound( y0 - 1000 * ( a ) );
        line( cdst, pt1, pt2, Scalar( 0, 0, 255 ), 3, LINE_AA );
    }
           
    // Show results
    imshow( "Source", src );
    imshow( "Detected Lines (in red) - Standard Hough Line Transform", cdst );
   
    // Wait and Exit
    waitKey();
    return 0;
}

运行结果

在这里插入图片描述
从结果图上看,这个函数的效果并不是很理想。也许能通过调参能更好一些

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新手向-Java调用C接口

最近工作上需要用java调用C接口&#xff0c;在这里记录一下。 非专业人员&#xff0c;有不同意见欢迎评论区交流。 java调用c接口一般有两种方案&#xff0c;JNI和JNA&#xff0c;JNI性能更好&#xff0c;使用复杂&#xff0c;JNA性能一般&#xff0c;使用简单&#xff0c;这里…

DnsDiag:一款针对DNS的故障排除和安全审计工具

关于DnsDiag DnsDiag是一款针对DNS的故障排除和安全审计工具&#xff0c;在该工具的帮助下&#xff0c;广大研究人员可以轻松检测DNS基础设施的安全性。 你是否曾怀疑过你的 ISP 是否劫持了你的 DNS 流量&#xff1f;你是否曾观察到 DNS 响应有任何异常行为&#xff1f;你是否…

计算机系统的组成

第二章&#xff1a;计算机系统组成 一、信息表示及存储 数据是反映客观事物属性的记录&#xff0c;是信息的具体表现形式。数据经过加工处理之后&#xff0c;就 成为信息&#xff1b;而信息需要经过数字化转变成数据才能存储和传输。 数据信息分为数值型和非数值型。 计算机能…

4.3章节python中循环结构:两种类型:for 循环和 while 循环用法

Python 中的循环结构主要有两种类型&#xff1a;for 循环和 while 循环。每种循环都有其特定的使用场景&#xff0c;允许你根据需要重复执行代码块。 一、遍历循环for语句 for 循环用于遍历任何序列&#xff08;如列表、元组或字符串&#xff09;或其他可迭代对象 (1)for 循环…

【Mysql】数据库基本操作-----DML

1、基本操作 DML是数据操作语言&#xff0c;英文全称是&#xff1a;Data Manipulation Language,用来对数据库中的数据记录进行更新。 关键字&#xff1a; &#xff08;1&#xff09;插入insert &#xff08;2&#xff09;删除delete &#xff08;3&#xff09;更新upda…

element的描述列表<el-descriptions>添加字典翻译功能

标题1 可以利用对象赋值进行翻译功能: HTML代码: <el-descriptions border :column"2" direction"vertical"><el-descriptions-item label"单位类别">{{companyTypeFormat(viewForm.companyType?viewForm.companyType:)}}</el-…

【AI变现】探索AI领域的财富密码:5大AI变现路径解析

随着现代科技的高速发展&#xff0c;AI已经不只是一个概念工具&#xff0c;它正在深刻地改变着我们的生活方式、工作模式和商业模式。 在这个AI无处不在的时代&#xff0c;如何抓住机遇&#xff0c;利用AI技术创造财富&#xff0c;成为了许多人关注的焦点。 接下来&#xff0…

2.5 有限冲激响应(FIR)滤波器

2.5 有限冲激响应&#xff08;FIR&#xff09;滤波器 2.5 有限冲激响应&#xff08;FIR&#xff09;滤波器 在此阶段&#xff0c;我们知道&#xff0c;大多数实际感兴趣的信号可以看作是不同频率下振荡的复数正弦波的总和。这些正弦波的幅度和相位决定了该信号的频率内容&…

苏州 工业三维动画制作「世岩清上」一站式可视化营销服务商

在现代工业设计和营销中&#xff0c;三维动画已成为一种重要的视觉传达工具。它不仅能够直观展示产品的外观和功能&#xff0c;还能通过动态演示来增强观众的理解和体验。本文将深入探讨工业三维动画制作的关键点&#xff0c;包括产品动画和场景动作的制作技巧。 产品动画制作…

数据结构实验二之栈和队列(上)——环形队列和链队

实验题3:实现环形队列的各种基本运算的算法 题目描述 编写一个程序sqqueue.cpp,实现环形队列(假设栈中的元素类型ElemTye为char)的各种基本运算,并在此基础上设计一个程序exp3-3.cpp完成以下功能。 (1)初始化队列q。 (2)判断队列q是否非空。 (3)依次进队元素a、b、c。 (4)出队…

【工具变量】无废城市试点DID数据集(2000-2023)

数据简介&#xff1a;2018年&#xff0c;国务院办公厅发布了《“无废城市”建设试点工作方案》&#xff0c;明确了“无废城市”的概念&#xff0c;强调通过创新、协调、绿色、开放的理念&#xff0c;推动城市固体废物管理的综合改革&#xff0c;力求实现固体废物产生量最小、资…

AI新方向:OpenAI o1是一个更擅长思考的模型系列:高级推理+逻辑严密+更广泛的知识,用于解决复杂的逻辑问题,慢思考

之前推出AI store感觉偏应用&#xff0c;也千篇一律&#xff0c;是AI的一个方向&#xff1a;广度。 现在推出o1 更严密的逻辑&#xff0c;也是AI的一个方向&#xff1a;深度。花更多时间&#xff0c;推理复杂的任务并解决比以前的科学、编码和数学模型更难的问题。确保AI的使用…

大模型训练技术:使用QLM提升Qwen2-7B 128k训练效率3.4倍

大模型训练技术&#xff1a;使用QLM提升Qwen2-7B 128k训练效率3.4倍 原创 一、引言 自Transformer架构问世以来&#xff0c;大模型领域的进展如火如荼&#xff0c;短短几年内&#xff0c;模型参数规模已攀升至天文数字&#xff0c;轻松跨过万亿门槛。面对如此庞然大物&#…

Comfyui 学习笔记3

ipadapter 用noise 增强画质 ipadapter 对每张图片的精准控制 对于一个 不是正方形的图形 作为ipadapter 可能丢弃下半身的风格&#xff0c;需要用ipadapter tile进行ipadapter 全身mask ipadapter advance weight_type 构图和风格迁移 构图迁移&#xff1a;左边什么 右面…

千万不要运行!几个可以整蛊你朋友的Python程序!

Python 能做很多无聊&#xff0c;但有意思的事情&#xff0c;例如接下来的一些案例。以下程序&#xff0c;不要发代码&#xff0c;要不实现不了你整蛊的目的。 要打包成一个 exe 程序&#xff0c;发给朋友才有意思&#xff0c;使用 pip install pyinstaller。 打包命令如下&a…

o1规划能力首测!已超越语言模型范畴,preview终于赢mini一回

克小西 发自 凹非寺 量子位 | 公众号 QbitAI o1-preview终于赢过了mini一次&#xff01; 亚利桑那州立大学的最新研究表明&#xff0c;o1-preview在规划任务上&#xff0c;表现显著优于o1-mini。 相比于传统模型的优势更是碾压级别&#xff0c;在超难任务上的准确率比Llama3.…

360° 镜头检测铝件内壁划痕与杂质:保障铝件内孔制造质量的精准方案

在铝件内孔制造的过程中&#xff0c;内壁的质量把控是至关重要的环节。制造过程中产生的碎屑残留以及划痕等问题&#xff0c;不仅会影响铝件的外观&#xff0c;更可能对其性能和使用寿命造成严重的损害。为了精准检测这些问题&#xff0c;我们提出了一套基于 360 镜头的检测方案…

金融科技革命:API接口开放平台,畅通金融服务之路

金融科技是近年来蓬勃发展的领域&#xff0c;它利用先进的技术手段来改善和创新金融服务。在金融科技的革命中&#xff0c;API接口开放平台扮演着重要的角色&#xff0c;它通过提供统一的接口服务&#xff0c;让金融机构和其他行业能够更方便地进行数据交换和合作。本文将以挖数…

高防服务器有用吗?租用价格一般多少

高防服务器有用吗&#xff1f;有用。高防服务器是一种具备高度防御能力的服务器&#xff0c;主要用于应对DDoS攻击、CC攻击等网络威胁。它通过专业的硬件设备和先进的防御算法&#xff0c;为用户提供持续、稳定的网络安全防护。高防服务器的主要特点包括强大的防御能力、低延迟…

跑步机的心声——N8900蓝牙音频芯片赋予智能健身新维度

国内健身器材市场年销售中跑步机占比超过一半&#xff0c;显示出其在健身器材领域的重要地位。国家卫生部门的公开讲话中提到&#xff0c;健康产业对国民经济的贡献具有无限前景&#xff0c;并强调了政府对健康产业的积极引导和支持。预计健康产业的产值将达到2万亿元以上&…