opencv霍夫直线检测

本文详细介绍了霍夫直线检测的基本原理,包括直线与极坐标的关系,以及两种霍夫直线检测API的具体使用方法:标准霍夫直线检测与累计概率霍夫直线检测。通过将直角坐标系上的点转换到极坐标表示的霍夫空间,实现直线的检测。
摘要由CSDN通过智能技术生成

一.直线与极坐标的关系

直线:y = (- cosθ / sinθ) * x + (r / cosθ)
极坐标:r = x₁ * cosθ + y₁ * sinθ
在这里插入图片描述
每一个直角坐标系上的点对应一个极坐标方程,将这个点映射到由 r–θ表示的霍夫空间,每个点对应一条曲线,在霍夫空间中当多条曲线相交于一点(r, θ)时,说明直角坐标系上的这些点都经过了由(r, θ)所表示的这条直线,所以属于同一条直线上的点,会在极坐标中某一点有最强的信号(亮度)
在这里插入图片描述

二.霍夫直线检测API

1.标准的霍夫直线检测:输出的是(r, θ)

void 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:二值图
参数lines:输出的极坐标来表示直线,每条直线用数组里面的两个元素(r, θ)表示。vector<Vec2f >
参数rho:生成极坐标时像素的扫描步长
参数theta:生成极坐标时角度的扫描步长,一般设置为1度:CV_PI / 180
参数threshold:阈值,只有极坐标交点获得足够的次数才能代表直线
参数srn,stn:srn,stn = 0,使用经典霍夫变换;srn,stn为正数则使用多尺度霍夫变换,扫描步长变为rho/srn,扫描角度步长变为theta / stn。(多尺度的步长精度更细)
参数min_theta,max_theta:设置的检测最小和最大角度
2.最常用的累计概率霍夫直线检测:输出的是(x0,y0,x1,y1)

void HoughLinesP( InputArray image, OutputArray lines,
                               double rho, double theta, int threshold,
                               double minLineLength = 0, double maxLineGap = 0 );

参数image:二值图
参数lines:vector<Vec4f>每条直线包含4个元素
参数rho:生成直角坐标时像素的扫描步长
参数theta:生成直角坐标时角度的扫描步长,一般设置为1度:CV_PI / 180
参数threshold:阈值,只有极坐标交点获得足够的次数才能代表直线
参数minLineLength:最小的直线长度(比如将长度小于5的不看做直线)
参数maxLineGap:两条直线之间最大距离(比如将间隔小于5的两条直线看做一条直线)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值