houghcricles
( inputarray image,
//輸入影象,必須是8為的單通道灰度資訊
outputarray circles,
//輸出結果,發現的圓資訊(乙個向量陣列vector)
int methon,
//方法——hough_gradient
double dp,
//dp=1,原圖上尋找為1,在原圖寬高個小一半為2
double mindist,
//10最短距離——可以是分辨兩個圓的,否則認為是同心圓——src_gray.rows/8
double param1,
//canny edge detection low threshold,(canny檢測低閾值)
double param2,
//中心點累加器閾值——候選圓心,一般30.50差不多了
int minradius,
//最小半徑
int maxradius //最大半徑
)
cvtcolor
(src,src,cv_bgr2gray);
medianblur
(src,dst,
size(5
,5),
0,0)
;//霍夫圓檢測
vectorcircles;
//將我們霍夫變換得到的結果存放到這個資料中
honghcircles
(dst,circles,hough_gradient,1,
10,100,30,
5,50)
;//輸出的是圓的資訊
//重新轉回rgb彩色空間
cvtcolor
(dst,dst,cv_gray2bgr);
src.
copyto
(dst)
;for
(size_t i =
0;i < circles.
size()
;i++
)imshow
("輸出影象"
,dst)
;
在對各類api呼叫時,我們要根據自己的知識體系對影象進行適當的預處理來幫助我們獲得更高的效率。
c++
:void
medianblur
(inputarray src, outputarray dst,
int ksize)
inputarray src:
輸入影象,影象為1、3、4通道的影象,當模板尺寸為3或5時,影象深度只能為cv_8u、cv_16u、cv_32f中的乙個,如而對於較大孔徑尺寸的,影象深度只能是cv_8u。
outputarray dst:
輸出影象,尺寸和型別與輸入影象一致,可以使用mat::clone以原影象為模板來初始化輸出影象dst
int ksize:
濾波模板的尺寸大小,必須是大於1的奇數,如3、5、7……
void
circle
(mat img,
//img為源影象
point center,
//center為畫圓的圓心座標
int radius,
//radius為圓的半徑
scalar color,
//color為設定圓的顏色,規則根據b(藍)g(綠)r(紅)
int thickness=1,
//thickness 如果是正數,表示組成圓的線條的粗細程度。否則,表示圓是否被填充
int linetype=8,
//line_type 線條的型別。預設是8
int shift=
0//shift 圓心座標點和半徑值的小數點位數
)
opencv中常用的非線性濾波器–中值濾波medianblur() 和 雙邊濾波bilateralfilter() 缺點 霍夫圓 霍夫圓變換
對於直線來說,一條直線能有引數極徑級角表示,而對圓來說我們需要三個引數來表示乙個圓 在opencv中,我們常常通過乙個叫 霍夫梯度法 的方法來解決圓變換的問題。霍夫梯度法的原理 1 首先對影象應用邊緣檢測,比如canny邊緣檢測 2 然後對邊緣影象中的每乙個非零點,考慮其區域性梯度,即用sobel函...
霍夫圓變換
對於直線來說,一條直線能有引數極徑級角表示,而對圓來說我們需要三個引數來表示乙個圓 在opencv中,我們常常通過乙個叫 霍夫梯度法 的方法來解決圓變換的問題。霍夫梯度法的原理 1 首先對影象應用邊緣檢測,比如canny邊緣檢測 2 然後對邊緣影象中的每乙個非零點,考慮其區域性梯度,即用sobel函...
缺點 霍夫圓 霍夫變換
霍夫變換是一種特徵提取,被廣泛應用在影象分析 電腦視覺以及數字影像處理。霍夫變換是用來辨別找出物件中的特徵,例如 線條。他的演算法流程大致如下,給定乙個物件 要辨別的形狀的種類,演算法會在引數空間中執行投票來決定物體的形狀,而這是由累加空間 accumulator space 裡的區域性最大值來決定...