在这篇Python OpenCV文章中,我将讨论使用HoughCircles检测图像中的圆。
OpenCV还具有探测圆的功能,那就是HoughCircles。
HoughCircles函数实现了圆形检测,它使用的算法也是改进的霍夫变换。
下面是这篇文章的完整源代码
import cv2
import numpy as np
planets = cv2.imread('www.linuxmi.com.jpg')
gray_img = cv2.cvtColor(planets,cv2.COLOR_BGR2GRAY)
img = cv2.medianBlur(gray_img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
#center
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,120,param1=100,param2=30,minRadius=0,maxRadius=0)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
#画出外圆
cv2.circle(planets,(i[0],i[1]),i[2],(0,255,0),6)
# 画出圆心
cv2.circle(planets,(i[0],i[1]),2,(0,0,255),3)
cv2.imshow("www.linuxmi.com - HoughCirlces",planets)
cv2.waitKey()
cv2.destroyAllWindows()
你还需要有一个图像在你的工作目录,我使用这个图像。

在最上面的代码中首先我们已经加载了图像并对图像进行了一些转换。
planets = cv2.imread(‘www.linuxmi.com.jpg’)
gray_img = cv2.cvtColor(planets,cv2.COLOR_BGR2GRAY)
img = cv2.medianBlur(gray_img,5)
cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
这就是我们用于圆检测的HoughCircle算法,它需要一些参数如输入图像,dp, minDistance, minRadious和maxRadious
circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,120,param1=100,param2=30,minRadius=0,maxRadius=0)
这行代码是用来画两个圆的,一个外圆和一个内圆。
for i in circles[0,:]:
# 画外圆
cv2.circle(planets,(i[0],i[1]),i[2],(0,255,0),6)
# 画出圆心
cv2.circle(planets,(i[0],i[1]),2,(0,0,255),3)
这是为了展示我们的图像。
cv2.imshow(“www.linuxmi.com – HoughCirlces”,planets)
cv2.waitKey()
cv2.destroyAllWindows()
现在运行完整的代码,结果如下:
