一. canny 演算法簡介
canny邊緣檢測運算元是 john f.canny 於 1986 年開發出來的乙個多級邊緣檢測演算法。更為重要的是,canny 創立了邊緣檢測計算理論(computational theory ofedge detection),解釋了這項技術是如何工作的。canny邊緣檢測演算法以canny的名字命名,被很多人推崇為當今最優的邊緣檢測的演算法。
二. canny 邊緣檢測的步驟
高斯模糊 - gaussianblur
灰度轉換 - cvtcolor
計算梯度幅值和方向 - sobel / scharr
非最大訊號抑制 ?說明
排除非邊緣畫素,僅僅保留一些細線條(候選邊緣)。
滯後閾值
滯後閾值需要兩個閾值,高閾值t1 和 低閾值t2
① 若某一畫素位置的幅值超過了高閾值,該畫素被保留為邊緣畫素。
② 若某一畫素位置的幅值小於低閾值,該畫素被排除。
③ 若某一畫素位置的幅值在兩個閾值之間,該畫素僅僅在連線到乙個高於高閾值的畫素時被保留。
④ 推薦高低閾值比在 2:1 到 3:1 之間。
三. canny() 函式介紹
void
canny
(inputarray image,outputarray edges,
double threshold1,
double threshold2,
int aperturesize=3,
bool l2gradient=
false
)
四. **示例
int
main
(int argc,
char
** ar**)
imshow
("src img"
, src)
;// 轉為灰度影象
mat gray;
cvtcolor
(src, gray, cv_bgr2gray)
;// 高斯模糊
gaussianblur
(gray, gray,
size(3
,3),
0,0, border_default)
;// canny檢測
mat cannyimg;
canny
(gray, cannyimg,
100,
100*
2.5,3,
false);
imshow
("canny img"
, cannyimg)
; mat cannycolor;
cannycolor.
create
(src.
size()
, src.
type()
);// 二值影象cannyimg中為1的部分,src的值賦給cannycolor
src.
copyto
(cannycolor, cannyimg)
;imshow
("cannycolor img"
, cannycolor)
;waitkey(0
);return0;
}
結果示例:
邊緣檢測 Canny運算元
1 使用高斯濾波器,以平滑影象,濾除雜訊。2 計算影象中每個畫素點的梯度大小和方向。3 應用非極大值 non maximum suppression 抑制,以消除邊緣檢測帶來的雜散響應。4 應用雙閾值 double threshold 檢測來確定真實的和潛在的邊緣。5 通過抑制孤立的弱邊緣最終完成邊...
Canny運算元邊緣檢測資源
邊緣檢測是影象處理和計算機視覺中的基本問題,邊緣檢測的目的是標識數字影象中亮度變化明顯的點。影象屬性中的顯著變化通常反映了屬性的重要事件和變化。這些包括 i 深度上的不連續 ii 表面方向不連續 iii 物質屬性變化和 iv 場景照明變化。邊緣檢測是影象處理和計算機視覺中,尤其是特徵提取中的乙個研究...
Opencv學習 邊緣檢測 (Canny運算元)
一 canny邊緣檢測 void canny inputarray image,outputarray edges,double threshold1,double threshold2,int aperturesize 3,bool l2gradient false image 輸入影象 edge...