OpenCV | OpenCV实战从入门到精通系列三 --canny边缘检测

点上方蓝字Python人工智能与深度学习社区获取更多干货

在右上方 ··· 设为星标 ★,与你不见不散

本文为学习笔记记录

canny边缘检测

本文是《OpenCV实战从入门到精通》系列之第3篇

OpenCV | OpenCV实战从入门到精通系列一 -- OpenCV宏的讲解

OpenCV | OpenCV实战从入门到精通系列二 -- OpenCV图像腐蚀

Canny边缘检测于1986年由JOHN CANNY首次在论文《A Computational Approach to Edge Detection》中提出,就此拉开了Canny边缘检测算法的序幕。

Canny边缘检测是从不同视觉对象中提取有用的结构信息并大大减少要处理的数据量的一种技术,目前已广泛应用于各种计算机视觉系统。Canny发现,在不同视觉系统上对边缘检测的要求较为类似,因此,可以实现一种具有广泛应用意义的边缘检测技术。

边缘检测的一般标准包括:

1)        以低的错误率检测边缘,也即意味着需要尽可能准确的捕获图像中尽可能多的边缘。

2)        检测到的边缘应精确定位在真实边缘的中心。

3)        图像中给定的边缘应只被标记一次,并且在可能的情况下,图像的噪声不应产生假的边缘。

为了满足这些要求,Canny使用了变分法。Canny检测器中的最优函数使用四个指数项的和来描述,它可以由高斯函数的一阶导数来近似。

在目前常用的边缘检测方法中,Canny边缘检测算法是具有严格定义的,可以提供良好可靠检测的方法之一。由于它具有满足边缘检测的三个标准和实现过程简单的优势,成为边缘检测最流行的算法之一。

Canny边缘检测算法可以分为以下5个步骤:

1)        使用高斯滤波器,以平滑图像,滤除噪声。

2)        计算图像中每个像素点的梯度强度和方向。

3)        应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。

4)        应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。

5)        通过抑制孤立的弱边缘最终完成边缘检测。

//------------【canny边缘检测】-------------
//
//-------------------------------------------------------------
#include <opencv2\opencv.hpp>
#include<opencv2\imgproc\imgproc.hpp>
using namespace cv;


//-------------【学习笔记3】------------------------------
//
//-------------------------------------------------
int main()
{
  //【0】载入原始图
  Mat srcImage = imread("my.jpg");
  imshow("原始图的边缘检测", srcImage);
  Mat dstImage, edge, grayImage;


  //【1】创建与src同类型的大学的矩阵dst
  dstImage.create(srcImage.size(), srcImage.type());


  //【2】将原始图像转换为灰度图像
  cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);


  //【3】先用3*3内核来降噪
  blur(grayImage, edge, Size(3, 3));


  //【4】运行canny算子
  Canny(edge, edge, 3, 9, 3);


  //【5】显示效果图
  imshow("最终效果图", edge);


  waitKey(0);


  return 0;
}


声明:本内容为学习笔记记录

图片来源网络,不代表本公众号立场。如有侵权,联系删除

2019清华北大录取分数线!

北京大学2019年录取分数线

2019年全国各省高考状元都报考了什么大学?

 Python人工智能与深度学习社区  

人工智能、深度学习、无人驾驶

计算机视觉、自然语言处理、

Github资源、AI论文速递

互联网大厂面试经验、内推资讯

猜你喜欢

转载自blog.csdn.net/qq_15698613/article/details/116751111