OpenCV边缘检测:Canny算子

边缘检测的一般步骤


1.滤波
2.增强
3.检测

现在我只能理解到概念性的···细化到代码和数学公式,真的吃不进去,待补充

Canny 算子

大致步骤如同老师讲时记得笔记:


二维高斯函数平滑图像

计算结果梯度

使用梯度幅度来估计每一点边缘强度

非极大值抑制和细化边缘

阈值处理,去掉伪边缘

一、最简单的canny用法,拿到原图后直接用。

二、高阶的canny用法,转成灰度图,降噪,用canny,最后将得到的边缘作为掩码,拷贝原图到效果图上,得到彩色的边缘图

实验代码


//———————————–【头文件包含部分】—————————————
// 描述:包含程序所依赖的头文件
//———————————————————————————————-

#include

#include <opencv2/opencv.hpp>

#include<opencv2/highgui/highgui.hpp>

#include<opencv2/imgproc/imgproc.hpp>

//———————————–【命名空间声明部分】—————————————
// 描述:包含程序所使用的命名空间
//———————————————————————————————–

using namespace cv;
using namespace std;

//———————————–【全局变量声明部分】————————————–
// 描述:全局变量声明
//———————————————————————————————–

//———————————–【全局函数声明部分】————————————–
// 描述:全局函数声明
//———————————————————————————————–

//———————————–【main( )函数】——————————————–
// 描述:控制台应用程序的入口函数,我们的程序从这里开始
//———————————————————————————————–
int main()
{
//载入原始图
Mat src = imread(“kuang1.jpg”); //工程目录下应该有一张名为1.jpg的素材图
Mat src1 = src.clone();

resize(src, src1, Size(src.cols / 6, src.rows / 6),0,0,INTER_LINEAR);

Mat dst, edge, gray;


// 【2】将原图像转换为灰度图像  
cvtColor(src1, gray, CV_BGR2GRAY);

// 【3】先用使用 3x3内核来降噪  
GaussianBlur(gray, edge, Size(3, 3),0,0);

// 【4】运行Canny算子  
Canny(edge, edge, 3, 9, 3);
imshow("canny",edge);
imwrite("cannyqq.jpg", edge);





waitKey(0);
return 0;

}

title: OpenCV边缘检测:Canny算子
date: 2018-03-28 16:54:18

tags: