opencv霍夫变换检测圆cvHoughCircles和直线cvHoughLines2的应用

本文介绍了OpenCV中使用霍夫变换检测直线cvHoughLines2和圆cvHoughCircles的方法,包括直线的参数空间转换、霍夫变换步骤,以及cvCircle和cvLine等函数的使用。通过示例代码展示了如何应用这些函数进行图像处理,实现圆和直线的检测,并给出了处理前后的图像对比。
摘要由CSDN通过智能技术生成

opencv霍夫变换检测圆cvHoughCircles和直线cvHoughLines2的应用

1)cvHonghLines2:直线

2)cvHoughCircles:该函数用Hough变换在二值图像中中寻找圆

3)cvCircle:是指绘制圆形的一个程序函数

4)cvLine:简单的绘制直线函数

5)cvLoadImage:载入图像的函数

霍夫变换是一种在图像中寻找直线、圆及其他简单形状的方法。原始的霍夫变换是一种直线变换,即在二值图像中寻找直线的一种相对快速的方法。

变换可以推广到其他普通的情况,而不仅仅是简单的直线,对于图像中共线的点集{(x0,y0), (x1,y1), ...}都经过直线y=kx+b,先在我们换一个说法,“斜率为k,截距为b的直线y=kx+b包含了所有在该直线上的点”。

一种强调的是图像中的点集,另一种强调的是直线的参数k和b,通过直线的点集去描述这条直线明显没有直接通过k,b两个参数去描述那样直接方便。而Hough变换就是将我们“点共线”的思维转化到参数空间{k,b}进行描述,图像空间中所有经过y=kx+b的点经过Hough变换后在参数空间都会相交于点(k,b),这样,通过Hough变换,就可以将图像空间中直线的检测转化为参数空间中对点的检测。我们不妨将y=kx+b进行一下变形:

这就是Hough变换将图像空间坐标(x,y)转化为参数空间(k,b)的Hough变换式。

Hough变换的步骤(执行过程):

  1. 在参数空间中建立一个二维(分别对应k,b)计数器,实际就是二维数组kbcnt,k维度为图像中直线斜率可能范围,b维度为图像中截距可能范围;数组中所有值都初始化为0;

  2. 扫描图像空间中的所有点(xi,yi),Hough变换式进行图像空间到参数空间的变换(ki,bi),计数kbcnt(ki,bi)++

  3. 设定阈值thr(图像中有多少个点共线才认为存在直线),kbcnt(ki,bi)>thr的ki,bi组成图像中的直线y=ki*x+bi

然而,上面的检测直线的方案貌似还有些问题:如果图像中存在竖直的直线呢,那kbcnt的k维度岂不是要无穷大!因此,才有了另一种参数空间的方案:利用极坐标参数而非“斜率-截距式”描述直线。

极坐标中的直线表示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值