霍夫變換 線檢測,圓檢測 OpenCV12

2021-10-05 10:06:07 字數 2579 閱讀 1316

原理先留著,日後補上。

針對線檢測,一般使用累計概率霍夫變換:houghlinep()函式  檢測速度更快。

cv_exports_w void houghlinesp( inputarray image, outputarray lines,

double rho, double theta, int threshold,

double minlinelength = 0, double maxlinegap = 0 );

輸入影象必須是八位單通道二進位制影象!

第二個引數:輸出的lines,儲存了檢測到的線條的向量,每條線具有4個元素的向量(x_1,x_2,y_1,y_2)

真實儲存時 [0] [1]表示第乙個點 [2][3]表示第二個點

第三個引數:以畫素為單位的距離精度,生成極座標的時候的畫素掃瞄步長

第四個引數:以弧度為單位的角度精度,生成極座標的時候的角度步長 ,一般取值 cv_pi/180

第五個引數:即識別某部分為圖中的一條直線時它在累加平面中必須達到的值,只有獲得足夠交點的極座標點才被看作是直線,

大於閾值threshold的線段才可以被檢測並返回到結果中

第六個引數: 最小直線長度,預設值0 ,比這個長度短的直線就不能被顯現出來

第七個引數:允許將同一行點與點之間連線起來的最大的距離

canny(img1, grayimg, 100, 200); //輸出即為邊緣二值化影象

cvtcolor(grayimg, img1, color_gray2bgr);

imshow("input img", grayimg); //邊緣二值化影象

vectorlines;//定義乙個向量結構lines用來存放得到的線段向量集合

houghlinesp(grayimg, lines, 1, cv_pi / 180, 100, 20, 10);

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

imshow("output img", img1);霍夫圓變換 houghcircle()函式

與線變換相比, 圓變換最大的優勢就是不需要原圖是二值的, houghlinesp需要原圖為二值影象;

cv_exports_w void houghcircles( inputarray image, outputarray circles,

int method, double dp, double mindist,

double param1 = 100, double param2 = 100,

int minradius = 0, int maxradius = 0 );

輸入影象為 八位單通道灰度影象即可

輸出 circles 為儲存了檢測到的圓的向量, 每個向量包含了三個元素的浮點向量(x,y,radius)

第三個引數為使用的檢測方法,目前只有一種辦法可以使用 即霍夫梯度法 hough_gradient

第四個引數dp  通常設定1 使得檢測圓心的累加器影象與源影象解析度相同。

設定為2的話,累加器只有源影象一般大小的高度和寬度

第五個引數 mindist  圓心之間的最小距離,這個引數如果太小,多個相鄰的圓可能就被檢測成同乙個圓

設定太大,某些圓就不能被檢測出來

第六個引數 有預設值100,他表示傳遞給canny邊緣檢測運算元的高閾值,而低閾值為高閾值的一半

第七個引數 有預設值為100, 他表示在檢測圓心階段的累加器的閾值。

它越小,則可以檢測更多不存在的圓;越大的話,能通過檢測的圓就更加接近完美的圓形

最後倆引數 乙個表示圓半徑的最小值,乙個表示圓半徑的最大值,可以直接使用預設,也可以自己規定來輔助檢測圓。

cvtcolor(img1,grayimg,color_bgr2gray);

medianblur(grayimg, grayimg, 3);

//因為霍夫圓檢測對雜訊比較敏感,首先要對影象做中值濾波

//gaussianblur(grayimg, grayimg, size(7, 7), 1.5, 1.5);

//此濾波方式為釋義中推薦 7*7 sigma1.5 1.5

vectorcircle1;

houghcircles(grayimg, circle1, hough_gradient, 1, 50, 100, 50, 0, 0);

cvtcolor(grayimg, grayimg, color_gray2bgr);

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

imshow("output img", grayimg);

OpenCV 霍夫變換圓檢測

在直角座標系下,圓的方程表示為 其中,r是圓的半徑,a,b 是圓心座標。那麼換一種表達方式 因為在直角座標系下,圓上的所有點都滿足圓的方程,所以直角座標系下的乙個圓對應到abr座標系下就是乙個點。直角座標系下經過乙個點的所有圓在abr座標系下就是一條三維曲線。那麼,直角座標系下圓上的所有點在abr座...

霍夫線 圓檢測技術

原理 霍夫線檢測 標準與多尺度霍夫變換 void houghlines inputarray image,outputarray lines,double rho,double theta,int threshold,double srn 0,double stn 0 引數 image 8位單通道二...

hough變換直線檢測 霍夫圓變換

霍夫圓變換的基本原理和霍夫線變換的原理類似,直線檢測中對應極座標點被三維的圓心點 x,y 以及半徑r即 x,y,r 所代替。對於圓來說,圓心點和半徑就可以確定乙個圓。三維空間中曲線相交於一點的邊緣點集越多,那麼它們經過的共同圓上的畫素點越多,那麼它們經過的共同圓上的畫素點就許多,設定相應的閾值相應的...