輸入爲灰度圖,且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:所檢測到的圓半徑的最大值
效果圖: