circles = cv.HoughCircles( image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]] )
- imge:输入的是一幅灰色的图片
- method: 常用的是cv.HOUGH_GRADIENT
- dp: 所使用的累加图像的分辨率。这个参数允许我们创建一幅分辨率比输入图像更低的累加器。这样做是有意义的,因为我们并不能保证图中的圆会自然落入与图像本身的宽度或高度相同数量的分区。如果dp设置为1,那么分辨率不发生变化,如果设置成一个较大的数比如2,累加器的分辨率会减小一半。dp的值不能小于1。
- minDist: 两个圆之间必须存在的最小距离,以便算法可以判断出它们是两个圆。
- circles: 找到圆的输出向量。
- param1和param2: 分别是边阈值和累加器阈值。在内部会调用Canny()进行边缘检测,param1作为Canny的参数;param2设置成param1的一半,用于累加器阈值,和HoughLines()的threshold相似。
- minRadius 和 maxRadius : 这两个参数可以找到圆的最小、最大半径,这意味着它们是累加器能够表示的圆的半径。
返回值:圆心(x,y) 和 半径
import cv2
import numpy as np
img = cv2.imread('q.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray',gray)
circles = cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,10,param1=100,param2=50,minRadius=70,maxRadius=100)
print(circles)
print(circles.shape)
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
cv2.circle(img,(i[0],i[1]),i[2],(0,255,0),5) # 画圆
cv2.circle(img,(i[0],i[1]),2,(0,255,0),3) # 画圆心
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
补充知识点:
numpy.around
(a, decimals=0, out=None)
将array四舍五入
- a:传入array
- decimal:指定小数位。默认为0
- out:作为返回值