OpenCV---圓檢測

 推文:Opencv2.4.9源碼分析——HoughCircles函數

 

 霍夫圓檢測

加載一幅圖像並對其模糊化以降噪
對模糊化後的圖像執行霍夫圓變換 .
在窗體中顯示檢測到的圓.
def detect_circle_demo(image):
    # dst = cv.bilateralFilter(image, 0, 150, 5)  #高斯雙邊模糊,不太好調節,霍夫噪聲敏感,因此要先消除噪聲
    # cv.imshow("1",dst)
    # dst = cv.pyrMeanShiftFiltering(image,5,100)  #均值遷移,EPT邊緣保留濾波,霍夫噪聲敏感,因此要先消除噪聲
    # cv.imshow("2", dst)
    dst = cv.GaussianBlur(image,(13,15),15) #使用高斯模糊,修改卷積核ksize也能夠檢測出來
    # cv.imshow("3", dst)
    gray = cv.cvtColor(dst,cv.COLOR_BGR2GRAY)
    circles = cv.HoughCircles(gray,cv.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0) circles = np.uint16(np.around(circles))  #around對數據四捨五入,爲整數 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.imshow("detect_circle_demo",image)

src = cv.imread("./c.png")  #讀取圖片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #建立GUI窗口,形式爲自適應
cv.imshow("input image",src)    #經過名字將圖像和窗口聯繫

detect_circle_demo(src)

cv.waitKey(0)   #等待用戶操做,裏面等待參數是毫秒,咱們填寫0,表明是永遠,等待用戶操做
cv.destroyAllWindows()  #銷燬全部窗口

相關知識補充:

(一)HoughCircles方法

1.加載一幅圖像
2.執行高斯模糊以下降噪聲:GaussianBlur
3.轉成灰度圖:cvtColor
4.執行霍夫圓變換:HoughCircles
def HoughCircles(image, method, dp, minDist, circles=None, param1=None, param2=None, minRadius=None, maxRadius=None): # real signature unknown; restored from __doc__
cv.HoughCircles(gray,cv.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0)
1.image:輸入圖像 (灰度圖)
2.method:指定檢測方法. 如今OpenCV中只有霍夫梯度法
3.dp:累加器圖像的反比分辨=1便可默認
4.minDist = src_gray.rows/8: 檢測到圓心之間的最小距離,這是一個經驗值。這個大了,那麼多個圓就是被認爲一個圓。
5.param_1 = 200: Canny邊緣函數的高閾值
6.param_2 = 100: 圓心檢測閾值.根據你的圖像中的圓大小設置,當這張圖片中的圓越小,那麼此值就設置應該被設置越小。當設置的越小,那麼檢測出的圓越多,在檢測較大的圓時則會產生不少噪聲。因此要根據檢測圓的大小變化。
7.min_radius = 0: 能檢測到的最小圓半徑, 默認爲0.
8.max_radius = 0: 能檢測到的最大圓半徑, 默認爲0
相關文章
相關標籤/搜索