霍夫變換檢測圓形

2022-04-27 17:47:43 字數 2370 閱讀 7314

【opencv入門教程之十四】opencv霍夫變換:霍夫線變換,霍夫圓變換合輯

houghcircles函式可以利用霍夫變換演算法檢測出灰度圖中的圓。它和之前的houghlines和houghlinesp比較明顯的乙個區別是它不需要源圖是二值的,而houghlines和houghlinesp都需要源圖為二值影象。

1

void houghcircles(inputarray image,outputarray circles, int method, double dp, double mindist, double param1=100,double param2=100, int minradius=0, int maxradius=0 )

1 mat src_color = imread("

c:/users/administrator/desktop/環形計數專利/樣本影象/白環.png

");//

讀取原彩色圖 2//

imshow("原圖-彩色", src_color);34

//宣告乙個三通道影象,畫素值全為0,用來將霍夫變換檢測出的圓畫在上面

5mat dst(src_color.size(), src_color.type());

6 dst = scalar::all(0);7

8 mat src_gray;//

彩色影象轉化成灰度圖

9cvtcolor(src_color, src_gray, cv_bgr2gray);

10 threshold(src_gray, src_gray, 100, 255

, cv_thresh_otsu);

11 src_gray = 255 -src_gray;

12 imshow("

原圖-灰度

", src_gray);

13//

imwrite("src_gray.png", src_gray);

1415 mat bf;//

對灰度影象進行雙邊濾波

16 bilateralfilter(src_gray, bf, kvalue, kvalue * 2, kvalue / 2

);17

//imshow("灰度雙邊濾波處理", bf);

18//

imwrite("src_bf.png", bf);

1920 vectorcircles;//

宣告乙個向量,儲存檢測出的圓的圓心座標和半徑

21 houghcircles(bf, circles, cv_hough_gradient, 1.5, 20, 130, 38, 10, 50);//

霍夫變換檢測圓

22 cout << circles.size() <

23//

cout << "x=\ty=\tr=" << endl;

2425

for (size_t i = 0; i < circles.size(); i++)//

把霍夫變換檢測出的圓畫出來

2636

37 imshow("

特徵提取

", dst);

38//

imwrite("dst.png", dst);

3940 waitkey();

霍夫梯度法的缺點<1> 在霍夫梯度法中,使用sobel導數來計算區域性梯度,其可以視作等同於一條區域性切線,這不是乙個數值穩定的做法。在大多數情況下,這樣做會得到正確的結果,但或許會在輸出中產生一些雜訊。

<2> 在邊緣影象中的整個非0畫素集被看做每個中心的候選部分。因此,如果把累加器的閾值設定偏低,演算法將要消耗比較長的時間。第三,因為每乙個中心只選擇乙個圓,如果有同心圓,就只能選擇其中的乙個。

<3> 因為中心是按照其關聯的累加器值的公升序排列的,並且如果新的中心過於接近之前已經接受的中心的話,就不會被保留下來。且當有許多同心圓或者是近似的同心圓時,霍夫梯度法的傾向是保留最大的乙個圓。可以說這是一種比較極端的做法,因為在這裡預設sobel導數會產生雜訊,若是對於無窮解析度的平滑影象而言的話,這才是必須的。

從實際執行的結果來看,我們發現houghcircles函式不足之處是所需要的引數較多,而且每個引數的改變對結果影響都很大,即漏檢和錯檢的機率很大。

霍夫變換圓形檢測(基於OpenCV Python)

基於python使用opencv實現在一張中檢測出圓形,並且根據座標和半徑標記出圓。不涉及理論,只講應用。函式說明 python cv2.houghcircles image,method,dp,mindist circles param1 param2 minradius maxradius ci...

Hough Transform 霍夫變換檢測直線

hough transform 霍夫變換檢測直線 從理論到 再從 到理論 1 理論之通俗理解 1.在影象中檢測直線的問題,其實質是找到構成直線的所有的畫素點。那麼問題就是從找到直線,變成找到符合y mx c的所有 x,y 的點的問題。2.進行座標系變化y mx c,變成c xm b。直線上的點 x1...

霍夫變換檢測直線

對於結構化道路的檢測,常用的方法是採用霍夫變換檢測道路中的直線段。一條直線可以看做是影象上的若干個畫素點組成,也可以用一條直線方程來表示,如 y kx b,那麼霍夫變換檢測直線段其實是將影象畫素點空間變換到引數空間,對於直線來說就是引數 k,b 也可以用來檢測其他形狀如圓和橢圓,只是引數空間表示不一...