使用cv2.HoughCircles()函数进行圆检测。
函数原型:cv2.HoughCircles(image,method,dp,minDist[, circles[,param1, param2[,minRadius[,maxRadius]]]]])
参数设置:
image:源图像;
method:cv2.HOUGH_GRADIENT 也就是霍夫圆检测,梯度法;
dp:计数器的分辨率图像像素分辨率与参数空间分辨率的比值,dp=1,则参数空间与图像像素空间(分辨率)一样大,dp=2,参数空间的分辨率只有像素空间的一半大;
minDist: 圆心之间最小距离,如果距离太小,会产生很多相交的圆,如果距离太大,则会漏掉正确的圆;
param1:canny检测的双阈值中的高阈值,低阈值是它的一半;
param2:基于圆心的最小投票数;
minRadius:需要检测圆的最小半径;
maxRadius:需要检测圆的最大半径。
源代码
import cv2
import numpy as np
planets = cv2.imread('planet_glow.jpg')
gray_img = cv2.cvtColor(planets, cv2.COLOR_BGR2GRAY)
img = cv2.medianBlur(gray_img, 5)
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, :]:
# draw the outer circle
cv2.circle(planets, (i[0], i[1]), i[2], (0, 255, 0), 2)
# draw the center of the circle
cv2.circle(planets, (i[0], i[1]), 2, (0, 0, 255), 3)
cv2.imshow("HoughCirlces", planets)
cv2.waitKey()
cv2.destroyAllWindows()
想了解更多关于数字图像处理:数字图像处理专栏