输入为灰度图,且8位。
http://www.cnblogs.com/wjy-lulu/p/6677280.html
def hough_circle_detection(image):
dst = cv.pyrMeanShiftFiltering(image, 5, 100) # 去噪点
cimage = cv.cvtColor(dst, cv.COLOR_BGR2GRAY) # 转灰度图
circles = cv.HoughCircles(cimage, cv.HOUGH_GRADIENT, 1, 30, param1=50, param2=30, minRadius=50, maxRadius=90)
circles = np.uint16(np.around(circles))
for i in circles[0, :]:
cv.circle(image, (i[0], i[1]), i[2], (0, 0, 255), 2)
cv.circle(image, (i[0], i[1]), 2, (255, 0, 0), 2)
cv.imwrite("after_Hough_Circles.jpg", image)
cv.imshow("circles", image)
均值偏移滤波,去噪点
cv.pyrMeanShiftFiltering(src, sp, sr)
https://blog.csdn.net/qq_18343569/article/details/47834385
良好的检测需要调整这里的参数:
cv.HoughCircles(image, method, dp, minDist, circles, param1, param2, minRadius, maxRadius)
image:为输入图像,要求是灰度图像
method:为使用霍夫变换圆检测的算法
dp:用来检测圆心的累加器图像的分辨率于输入图像之比的倒数,且此参数允许创建一个比输入图像分辨率低的累加器。例如,如果dp = 1时,累加器和输入图像具有相同的分辨率。如果dp = 2,累加器便有输入图像一半那么大的宽度和高度。
为第一阶段所使用的霍夫空间的分辨率,dp=1时表示霍夫空间与输入图像空间的大小一致,dp=2时霍夫空间是输入图像空间的一半,以此类推。
minDist:为圆心之间的最小距离,如果检测到的两个圆心之间距离小于该值,则认为它们是同一个圆心
circles
param1:阈值
param2:阈值
minRadius:所检测到的圆半径的最小值
maxRadius:所检测到的圆半径的最大值
效果图: