python3.6 + opencv3 -霍夫圓檢測

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

效果圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章