热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

c/c++开发分享OpenCV霍夫圆变换cv2.HoughCircles()

目录这篇博客将学习如何使用霍夫圆变换在图像中找到圆圈,opencv使用cv2.houghcircles()实现霍夫圆变换。circlescv2.houghcircles(im
目录

这篇博客将学习如何使用霍夫圆变换在图像中找到圆圈,opencv使用cv2.houghcircles()实现霍夫圆变换。

circles = cv2.houghcircles(img,
cv2.hough_gradient, 1, 20,
param1=50, param2=40, minradius=25, maxradius=0)

img: 待检测的灰度图cv2.hough_gradient:检测的方法,霍夫梯度1:检测的圆与原始图像具有相同的大小,dp=2,检测的圆是原始图像的一半20:检测到的相邻圆的中心的最小距离(如果参数太小,除了一个真实的圆外,还可能会错误地检测到多个相邻圆。如果太大,可能会漏掉一些圆。)param1:在#houghŠu梯度的情况下,它是较高的. 两个阈值传递到canny边缘检测器(较低的一个小两倍)。param2:在#houghŠu梯度的情况下,它是检测阶段圆心的累加器阈值。它越小,就越可能检测到假圆;minradius:最小圆半径maxradius:最大圆半径,如果<=0,则使用最大图像尺寸。如果<0,则返回没有找到半径的中心。

%ignore_a_1%

1. 效果图

原始图 vs 检测圆效果图如下:

如下右图可以看到3个外侧圆绿色,圆心红色被成功检测到;

OpenCV霍夫圆变换cv2.HoughCircles()

圆的最小半径设置由25调整为10,也可能会错误的检测到圆,效果图如下:

OpenCV霍夫圆变换cv2.HoughCircles()

检测圆半径的阈值(param2设置35)的结果,最小圆半径设置10,也可能会错误的检测到圆,效果图如下:

OpenCV霍夫圆变换cv2.HoughCircles()

2. 源码

  # 霍夫圆检测    import cv2  import numpy as np    cimg = cv2.imread('opencv_logo_350.jpg')  cv2.imshow("origin", cimg)  cv2.waitkey(0)  img = cv2.cvtcolor(cimg,cv2.color_bgr2gray)  img = cv2.medianblur(img, 5)  cimg = cv2.cvtcolor(img, cv2.color_gray2bgr)    # - img: 待检测的灰度图  # - cv2.hough_gradient:检测的方法,霍夫梯度  # - 1:检测的圆与原始图像具有相同的大小,dp=2,检测的圆是原始图像的一半  # - 20:检测到的圆的中心的最小距离(如果参数为太小,除了一个真实的圆外,还可能会错误地检测到多个相邻圆。如果太大,可能会漏掉一些圆。)  # - param1:在#houghŠu梯度的情况下,它是较高的. 两个阈值传递到canny边缘检测器(较低的一个小两倍)。  # - param2:在#houghŠu梯度的情况下,它是检测阶段圆心的累加器阈值。它越小,就越可能检测到假圆;  # - minradius:最小圆半径,也可能会检测到假圆  # - maxradius:最大圆半径,如果<=0,则使用最大图像尺寸。如果<0,则返回没有找到半径的中心。  circles = cv2.houghcircles(img, cv2.hough_gradient, 1, 20,                             param1=50, param2=40, minradius=0, maxradius=0)  # 最小圆半径设置不合适,也可能会检测到假圆  # circles = cv2.houghcircles(img, cv2.hough_gradient, 1, 20,  #                            param1=50, param2=40, minradius=0, maxradius=0)  # circles = cv2.houghcircles(img, cv2.hough_gradient, 1, 20,  #                            param1=50, param2=30, minradius=10, maxradius=0)    circles = np.uint16(np.around(circles))    print(len(circles))  print(circles)  for i in circles[0, :]:      # 绘制外圈圆(蓝色)      cv2.circle(cimg, (i[0], i[1]), i[2], (0, 255, 0), 2)        # 绘制圆心(红色)      cv2.circle(cimg, (i[0], i[1]), 2, (0, 0, 255), 3)    cv2.imshow('detected circles', cimg)  cv2.waitkey(0)  cv2.destroyallwindows()  

参考

到此这篇关于opencv霍夫圆变换cv2.houghcircles()的文章就介绍到这了,更多相关opencv霍夫圆变换内容请搜索<编程笔记>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<编程笔记>!

需要了解更多c/c++开发分享OpenCV霍夫圆变换cv2.HoughCircles(),都可以关注C/C++技术分享栏目—编程笔记


推荐阅读
author-avatar
Chickny的造梦空间
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有