基於梯度的霍夫圓檢測原理 略
直接看**
一、首先讀取一張,處理成灰度圖。並對其做濾波降噪,因為霍夫圓檢測是對雜訊敏感的。這裡用到的降噪方法一般是用保留邊緣的濾波。
我用的是這張圖:
二、然後就可以用霍夫圓檢測啦。
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...