边缘检测的一般步骤
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