opencv--imgproc模块·Hough 检测圆

官网:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/imgtrans/hough_circle/hough_circle.html#hough-circle

前言

Hough变换也是在图像处理、计算机视觉领域应用很广泛的技术。

经常是用Hough来检测直线,今天想学习下Hough检测圆。

用官网的代码,自己在网上找了幅有圆的图片,却检测出不来

然后重新找了一幅图片,就可以,如下图所示(dp =2 , minDist =Image.rows/8)

整个代码中,最重要的就是HoughCircles()函数,

来看它的定义:

void HoughCircles( InputArray image, OutputArray circles,
       int method, double dp, double minDist,
       double param1=100, double param2=100,
       int minRadius=0, int maxRadius=0 );

//dp,用来检测圆心的累加器图像的分辨率与输入图像之比的倒数,例如如果dp= 1时,累加器和输入图像具有相同的分辨率。如果dp=2,累加器便只有输入图像一半的分辨率

//minDist 检测到的圆的圆心之间的最小距离,即让我们的算法能明显区分的两个不同圆之间的最小距离。如果这个参数设置过大,某些圆就不能被检测出来。

如上图,按照官网上设置为Image.rows/8 , 该图像 Image.rows = 279, 即  minDist = 34点多

当参数 minDist 设置为20时,结果如下,的确把上面没有检测到的圆检测出来了

当改变参数为dp = 3,minDist仍然为Image.rows/8时,

回到最初遇到的那个问题

为什么那个建筑物的圆没检测出来呢?,原因在这里

 //采用高斯滤波去除噪声
   GaussianBlur(tmp,tmp,Size(9,9),2,2);

特意显示了下滤波后的效果图,如下图,图片变得很模糊,

于是不执行这一行,即不进行降噪处理,发现可以检测出来了!说明降噪处理要因图而异,并不是所有都需要!

至于为什么只检测出一个圆,博主@ 浅墨_毛星云描述:当有许多同心圆或者是近似的同心圆时,霍夫梯度法(CV_HOUGH_GRADIENT)的倾向是保留最大的一个圆 。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值