边缘检测的一般步骤:

OpenCV——边缘检测入门、Canny边缘检测_灰度图

 

最优边缘检测的三个评价标准:

低错误率:表示出尽可能多的实际边缘,同时尽可能地减少噪声产生的误报;

高定位性:标识出的边缘要与图像实际边缘尽可能接近;

最小响应:图像中的边缘只能标识一次,并且可能存在的图像噪声不应被标识为边缘。

 

OpenCV——边缘检测入门、Canny边缘检测_二值图像_02

OpenCV——边缘检测入门、Canny边缘检测_灰度图_03

示例程序:



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 }


 OpenCV——边缘检测入门、Canny边缘检测_示例程序_04

不管是哪种方法最后得到的都是二值图像