一、概述
A.Canny算法介紹:算法分為五步,opencv已經幫我們封裝好了,但是在使用的時候最好用濾波再進行一次降噪,這樣效果會更好
1.高斯模糊
2.灰度轉換
3.計算梯度Sobel/Scharr
4.非最大信號抑制
5.高低閾值連接輸出二值圖像
ps:高低閾值:T1, T2為閾值,凡是高於T2的都保留,凡是小於T1都丟棄,從高於T2的像素出發,凡是大於T1而且相互連接的,都保留。最終得到一個輸出二值圖像。 推薦的高低閾值比值為 T2: T1 = 3:1/2:1其中T2為高閾值,T1為低閾值
B.函數介紹
Canny( InputArray src, // 8-bit的輸入圖像,也就是單通道圖像 OutputArray edges,// 輸出邊緣圖像, 一般都是二值圖像,背景是黑色 double threshold1,// 低閾值,常取高閾值的1/2或者1/3 double threshold2,// 高閾值 int aptertureSize,// Soble算子的size,通常3x3,取值3 bool L2gradient // 選擇 true表示是L2來歸一化,否則用L1歸一化,一般我們選擇L1,性能更好 )
二、代碼示例
Mat src = imread(filePath); if(src.empty()){ return; } imshow("src",src); Mat dst,result,mask; //均值濾波過濾 blur(src,dst,Size(3,3)); //轉灰度圖像 cvtColor(dst,dst,COLOR_BGRA2GRAY); //邊緣檢測 Canny(dst,result,50,100,3,true); mask.create(src.size(),src.type()); src.copyTo(mask,result); imshow("mask",mask); imshow("result",result);