2019-8-21 opencv图像处理13-霍夫曼直线变换(Hough Line Transform )-识别图像中直线

本文介绍了OpenCV中的霍夫曼直线变换和概率霍夫曼变换,详细阐述了这两种变换的工作原理和实现方式。霍夫曼变换用于检测图像中的直线,通过累加器阵列找到具有最高值的(ρ,θ)来确定直线。概率霍夫曼变换则是一种优化,只需处理部分点即可检测直线,降低了计算量。OpenCV提供了cv.HoughLines()和cv.HoughLinesP()函数实现这两种变换,后者返回线段的两个端点。" 88238785,7470250,蓝桥杯汉字字形复原与隐藏信息解析,"['编程竞赛', '数据解析', '位操作', '算法']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官网参见 https://docs.opencv.org/3.4.1/d6/d10/tutorial_py_houghlines.html
以前自己也了解过了,https://blog.youkuaiyun.com/weixin_42555985/article/details/93467432

这里为了确保资料完成性,就按照官网内容再了解一下。

霍夫曼变换 是一种用来检测任何形状的通用技术,只要这个形状可以用数学公式表示就行。即使形状是有一点破损的,或者扭曲的,也可以用霍夫曼变换来检测出。

直线可以用y=mx+c 表示,也可以用极坐标形式ρ=xcosθ+ysinθ表示,其中ρ是从原点到直线的垂直距离,θ是直线的垂线和水平轴形成的逆时针夹角(这里描述的是opencv中的定义,参见下图)。
在这里插入图片描述
如果直线从原点下方经过,ρ>0,θ<180度
如果直线从原点上方经过,ρ<0,θ<180度
垂直线,θ=0。水平线,θ=90。

现在来看一下霍夫曼直线变换。我们已经知道每条直线可以用(ρ,θ)表示。所以先创建一个二维数组(累加器,保存2个参数的值),把它初始化设置为0。ρ表示行,θ表示列。数组大小取决于所需要的检测精度。假设你需要角度精度为1度,那数组就要180列。对于ρ,最大值就是图像的对角线距离,所以要达到1个像素的精度,那么数组的行数就是图像对角线距离。

假设有一个100*100的图像,有一条水平直线在图像中央。取直线上的一个点,你知道它的值为(x,y),在直线方程式中就可以把θ=0,1,2,…,180代入其中,获得对应的ρ值。对于每一个(ρ,θ),在累加器中对应的(ρ,θ)单元格的值加1。所以现在累加器中,单元格(50,90) = 1 。(注意:一个点可能存在与多条直线中,所以对于直线上的每一个点可能是累加器中的多个值同时加1)

然后取直线上第二个点。做上面同样的操作,增加累加器中对

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值