cv2.error: opencv(4.4.0)_【从零学习OpenCV 4】圆形检测

030e03684d2176a606c21c96770472f2.png

本文首发于“小白学视觉”微信公众号,欢迎关注公众号

本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究!


经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。

霍夫变换同样可以检测图像中是否存在圆形,其检测方法与检测直线的方式相同,都是将图像空间x-y直角坐标系中的像素投影到参数空间中,之后寻找是否存在交点。在检测圆形的霍夫变换中圆形的数学描述形式如式(7.7)所示。

假设图像上中心像素点$({x_0},{y_0})$和圆的半径$R$已知,根据已知量和式(7.7)可以将图像空间x-y直角坐标系中的像素投影到参数空间中,图7-12给出了这种霍夫变换的示意图。

418e5612a7af942900cf155adb0813c1.png
图7-12 圆形霍夫变换示意图

OpenCV 4中提供了利用霍夫变换检测图像中是否存在圆形的HoughCircles()函数,该函数的函数原型在代码清单7-9中给出。

代码清单
  • image:待检测圆形的输入图像,数据类型必须是CV_8U的单通道灰度图像。
  • circles:检测结果的输出量,每个圆形用三个参数描述,分别是圆心的坐标和圆的半径
  • method:检测圆形的方法标志,目前仅支持HOUGH_GRADIENT方法。
  • dp:离散化时分辨率与图像分辨率的反比。
  • minDist:检测结果中两个圆心之间的最小距离。
  • param1:使用HOUGH_GRADIENT方法检测圆形时,传递给Canny边缘检测器的两个阈值的较大值。
  • param2:使用HOUGH_GRADIENT方法检测圆形时,检测圆形的累加器阈值,阈值越大检测的圆形越精确。
  • minRadius:检测圆的最小半径
  • maxRadius:检测圆的最大半径。

该函数可以检测灰度图像中是否存在圆形,与前面介绍的霍夫变换相关函数不同,该函数会调用Canny边缘检测进行边缘检测,因此在检测圆形时不需要对灰度图像进行二值化,直接输入灰度图像即可。函数中第一个参数是输入图像,图像的数据类型必须是CV_8UC1。函数第二个参数是圆形的检测结果,存放在vector类型的变量中,每个圆形的检测结果变量类型是Vec3f,其中前2个参数是圆形的中心坐标,第3个参数是圆形的半径。第三个参数是检测圆形的方法标志,目前仅支持HOUGH_GRADIENT方法。第四个参数是离散化时分辨率与图像分辨率的反比。例如,如果dp = 1,则图像离散化后具有与输入图像相同的分辨率,如果dp = 2,则图像离散化后宽度和高度都是原图像的一半。第五个参数是检测结果中两个圆心之间的最小距离,如果参数太小,除了真实的圆形之外,可能错误地检测到多个相邻的圆圈;如果参数太大,可能会遗漏一些圆形。第六个参数是Canny检测边缘时两个阈值的较大值,较小阈值默认为较大值的一半。第七个参数是累加器阈值,阈值越大检测的圆形越精确。最后两个参数是检测圆形半径的取值范围,半径的最小值需要大于等于0,默认值为0;半径的最大值可以任意取值,当取值小于等于0时圆形半径的最大值为图像尺寸的最大值,并且检测结果只输出圆形的中心,不输出圆形的半径。

为了了解该函数的使用方法以及圆形的检测结果,在代码清单7-10中给出了利用HoughCircles()函数检测图像中是否存在圆形的示例程序,程序的输出结果在图7-13给出。

代码清单

eda3810087e03760e8a543e76efd82ec.png
图7-13 myHoughCircles.cpp程序中圆形检测结果

经过几个月的努力,市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解》将春节后由人民邮电出版社发行。如果小伙伴觉得内容有帮助,希望到时候多多支持!

关注小白的小伙伴可以提前看到书中的内容,我们创建了学习交流群,欢迎各位小伙伴添加小白微信加入交流群,添加小白时请备注“学习OpenCV 4”。

https://u.wechat.com/MJ-57nVtXgxUyL3dTwWd014 (二维码自动识别)

4a2f03910e6cb5f7a910a055375b0809.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值