邊緣檢測的一般步驟:
最優邊緣檢測的三個評價標准:
低錯誤率:表示出盡可能多的實際邊緣,同時盡可能地減少噪聲產生的誤報;
高定位性:標識出的邊緣要與圖像實際邊緣盡可能接近;
最小響應:圖像中的邊緣只能標識一次,並且可能存在的圖像噪聲不應被標識為邊緣。
示例程序:
1 #include <opencv2/opencv.hpp> 2 #include <iostream> 3 4 using namespace cv; 5 using namespace std; 6 7 //Canny邊緣檢測的一般過程: 8 //轉成灰度圖 9 //降噪 10 //用Canny算子(此時已經得到了邊緣) 11 //將邊緣作為掩碼,拷貝原圖到效果圖上,得到彩色的邊緣 12 13 14 int main(int argc, char** argv) 15 { 16 Mat src = imread("test.jpg"); 17 Mat src1 = src.clone(); 18 Mat dst, edge, gray; 19 20 //初始化輸出圖 21 dst.create(src1.size(), src1.type());6 22 dst = Scalar::all(0); 23 24 //轉成灰度圖 25 cvtColor(src1, gray, COLOR_BGR2GRAY); 26 27 //均值濾波降噪,也可以用其他濾波方法 28 blur(gray, edge, Size(3, 3)); 29 30 //運行canny算子,得到邊緣 31 Canny(edge, edge, 3, 9, 3); 32 33 //掩膜的存在使得只有邊緣部分被copy,得到彩色的邊緣 34 src1.copyTo(dst, edge); 35 36 imshow("效果圖", dst); 37 38 waitKey(0); 39 return 0; 40 41 }
不管是哪種方法最后得到的都是二值圖像