基於梯度的霍夫圓檢測

2021-10-07 02:46:38 字數 1771 閱讀 5871

基於梯度的霍夫圓檢測原理 略

直接看**

一、首先讀取一張,處理成灰度圖。並對其做濾波降噪,因為霍夫圓檢測是對雜訊敏感的。這裡用到的降噪方法一般是用保留邊緣的濾波。

我用的是這張圖:

二、然後就可以用霍夫圓檢測啦。

rows,cols = gray.shape

circles=cv.houghcircles(gray,cv.hough_gradient,1,rows/8,none,param1=100,param2=30,minradius=20,maxradius=90)

if circles is not none:

for i in circles[0,:]:

centers = (i[0],i[1])

raidus = i[2]

cv.circle(src,centers,2,(0,0,255),-1,8,0) #繪出中心

cv.circle(src, centers, raidus, (0, 0, 255), 3, 8, 0) #繪出輪廓

cv.imshow("circles",src)

於是得到:

挺完美的是不是 ~ ~

這裡劃出重點:

cv.houghcircles(gray,cv.hough_gradient,1,rows/8,none,param1=100,param2=30,minradius=20,maxradius=90)

這裡的引數調整是關鍵,要根據不同的來調節引數,才能有好的效果。

引數:(灰度圖,

方法選擇霍夫梯度法,

與原圖的比例解析度 [ 1表示與原圖一致 ] ,

區分兩個不同圓的最小距離 [ 如果最小距離太小,就會有很多重複的圓 ],

param1 canny的閾值上限,

param2 累加器的閾值,

minradius 能檢測到的圓的最小半徑,

maxradius 能檢測到的圓的最大半徑)

一般會去調整最小距離和半徑。按需求收縮半徑範圍可以有效的加快檢測速度。

下面是另外兩張圖的應用:

霍夫檢測圓 霍夫梯度法

承接上篇博文,在基本搞懂霍夫檢測直線是怎麼進化到檢測圓後,開始 痴心妄想 自己寫 了!雖說最後的效果不是很好,但是重要的是在碼 過程中發現和解決的一些問題 不一定有共性,但兄弟萌可以避免下這些bug 上篇博文已經闡述了我們是如何從三維計數 轉到霍夫梯度法的,該演算法主要分為兩步,先找圓心疑似點,再對...

(22)霍夫圓檢測

霍夫圓檢測 霍夫變換進行圓檢測 幾何中圓心座標和半徑表徵乙個圓,從平面座標到極座標轉換三個引數c x0,y0,r 固定r,在0 360度空間的時候只有x0,y0這兩個變數,就是a跟b,其中x0,y0是圓心,那麼在圓心處有最大值,霍夫空間累計最大值在圓心處 假設平面座標的任意乙個圓上的點,轉換到極座標...

霍夫梯度法找圓

opencv內部提供了乙個基於hough變換理論的找圓演算法,houghcircle與一般的擬合圓演算法比起來,各有優勢 優勢 houghcircle對雜訊點不怎麼敏感,並且可以在同乙個圖中找出多個圓 反觀擬合圓演算法,單純的擬合結果容易受雜訊點的影響,且不支援乙個輸入中找多個圓 opencv內的h...