【opencv入門教程之十四】opencv霍夫變換:霍夫線變換,霍夫圓變換合輯houghcircles函式可以利用霍夫變換演算法檢測出灰度圖中的圓。它和之前的houghlines和houghlinesp比較明顯的乙個區別是它不需要源圖是二值的,而houghlines和houghlinesp都需要源圖為二值影象。
1void 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("霍夫梯度法的缺點<1> 在霍夫梯度法中,使用sobel導數來計算區域性梯度,其可以視作等同於一條區域性切線,這不是乙個數值穩定的做法。在大多數情況下,這樣做會得到正確的結果,但或許會在輸出中產生一些雜訊。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();
<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 也可以用來檢測其他形狀如圓和橢圓,只是引數空間表示不一...