这篇教程OpenCV霍夫圆变换cv2.HoughCircles()写得很实用,希望能帮到您。 这篇博客将学习如何使用霍夫圆变换在图像中找到圆圈,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,则返回没有找到半径的中心。
1. 效果图原始图 VS 检测圆效果图如下: 如下右图可以看到3个外侧圆绿色,圆心红色被成功检测到;

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

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

2. 源码# 霍夫圆检测import cv2import numpy as npcimg = 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()
参考https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_houghcircles/py_houghcircles.html#hough-circles 到此这篇关于OpenCV霍夫圆变换cv2.HoughCircles()的文章就介绍到这了,更多相关OpenCV霍夫圆变换内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net! python中BackgroundScheduler和BlockingScheduler的区别 支持python的分布式计算框架Ray详解 |