边缘检测
1、Sobel

2、Laplace

3、Roberts

4、Canny

Canny
canny对边缘检测质量进行分析时,有3个原则:

1、信噪比准则
2、定位精度准则
3、单边缘响应准则        
canny边缘检测的基本思想是:首先对图像选择一定的Gauss滤波器进行平滑滤波,然后采用非极值抑制技术进行处理得到最后的边缘图像。

Canny算法基本可分为4个步骤:
步骤一:

滤波平滑噪声。


GaussianBlur(src,dst,Size(3,3),1.5,1.5);

步骤二:

利用已有的一阶偏导算子计算梯度。一般用sobel


步骤三:

非极大值抑制(https://blog.csdn.net/dieju8330/article/details/82789186)


 步骤四:

双阈值法抑制假边缘,连接真边缘


核心函数:
void Canny(InputArray image,OutputArray edges, double threshold1, double threshold2, int apertureSize=3,bool L2gradient=false )
InputArray类型的image,输入图像,即源图像,填Mat类的对象即可,且需为单通道8位图像。
OutputArray类型的edges,输出的边缘图,需要和源图片有一样的尺寸和类型。
double类型的threshold1,第一个滞后性阈值【低阈值】。值越大,找到的边缘越少
double类型的threshold2,第二个滞后性阈值【高阈值】。
int类型的apertureSize,表示应用Sobel算子的孔径大小,其有默认值3。
bool类型的L2gradient,一个计算图像梯度幅值的标识,有默认值false。
低于阈值1的像素点会被认为不是边缘;

高于阈值2的像素点会被认为是边缘;

在阈值1和阈值2之间的像素点,若与第2步得到的边缘像素点相邻,则被认为是边缘,否则被认为不是边缘。

调用代码: 
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
void main()
{
    Mat srcImage = imread("F:\\opencv_re_learn\\2.jpg");
    if (!srcImage.data){
        cout << "falied to read" << endl;
        system("pause");
        return;
    }
    Mat srcGray;
    cvtColor(srcImage, srcGray, CV_BGR2GRAY);
    //高斯滤波
    GaussianBlur(srcGray, srcGray, Size(3, 3),
        0, 0, BORDER_DEFAULT);
    //Canny检测
    int edgeThresh =100;
    Mat Canny_result;
    Canny(srcImage, Canny_result, edgeThresh, edgeThresh * 3, 3);
    imshow("src", srcImage);
    imshow("Canny_result", Canny_result);
    waitKey(0);
}
实现效果:


原文:https://blog.csdn.net/dieju8330/article/details/82814529

边缘检测(5)Canny算法相关推荐

  1. caany边缘检测matlab,自适应canny算法研究及其在图像边缘检测中的应用.pdf

    自适应canny算法研究及其在图像边缘检测中的应用.pdf 还剩 51页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容 ...

  2. 算法应用三:【图像分割】+【边缘检测】canny边缘检测--冈萨雷斯--《数字图像处理》

    canny主要工作:推导了最优边缘检测算子.       图像的边缘检测是:图像最基本特征,边缘点指的是图像中周围像素灰度有阶跃变化或屋顶变化的那些像素点,即:灰度值导数极大的地方. 边缘检测的目的是 ...

  3. python canny算法_Python 实现 Canny 边缘检测算法

    Canny 边缘检测算法由计算机科学家 John F. Canny 于 1986 年提出的.其不仅提供了算法,还带来了一套边缘检测的理论,分阶段的解释如何实现边缘检测.Canny 检测算法包含下面几个 ...

  4. matlab彩色图像边缘检测,canny算法实现彩色图像边缘检测

    该程序将原始图像转换到YCbCr颜色空间,查找彩色图像的边缘.使用了canny算法进行边缘检测. YCbCr或Y'CbCr有的时候会被写作:YCBCR或是Y'CBCR,是色彩空间的一种,通常会用于影片 ...

  5. OpenCV(十七)边缘检测3 -- Canny算子(最优边缘检测)

    目录 一.基础理论 1.作用及介绍 1.原理 2.过程 3.Canny函数 二.回调函数及总代码 效果 参考资料 ​​​​​​​ 一.基础理论 1.作用及介绍 Canny边缘检测是非常流行的边缘检测算 ...

  6. OpenCV 【七】————边缘提取算子(图像边缘提取)——canny算法的原理及实现

    canny边缘检测实现(C++.opencv) 1.作用: 图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用.在空域运 ...

  7. 【OpenCV 4开发详解】Canny算法

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  8. Python+Opencv实现无参数、全自动的Canny算法

    目录 一.什么是Canny边缘检测算法? 二.最优边缘准则是什么? 三.Canny算法实现步骤 四.Canny算法在使用中的问题? 五.无参数.自动化Canny算法代码实现 六.改进算法效果展示 七. ...

  9. OpenCV学习笔记(十二):边缘检测:Canny(),Sobel(),Laplace(),Scharr滤波器

    OpenCV学习笔记(十二):边缘检测:Canny(),Sobel(),Laplace(),Scharr滤波器 1)滤波:边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此 ...

最新文章

  1. win10 spark+scala+eclipse+sbt 安装配置
  2. java单点登录强制下线_实现单点登录并强制对方下线
  3. 表达不同与构建不同: 对计算机的唯一真正的要求 (TrustNo.1 ) -- 待修改!!!...
  4. log4net 存储到oracle 调试 Could not load type [log4net.Appender.OracleAppender]
  5. 陕西理工大学计算机科学与技术系,陕西理工大学计算机科学与技术专业2016年在陕西理科高考录取最低分数线...
  6. php 高德地图计算距离,距离、长度、面积
  7. 2018.09.28python学习第十三天part2
  8. YARN部件以及执行流程
  9. 嘉年华回顾丨 尚博带你了解腾讯 TXSQL如何 赋能腾讯云分布式数据库 CynosDB
  10. 坦克大战python_Python语言学了没用?那只能说你是真的没有精通了Python语言
  11. Python中的strip(),lstrip(),rstrip()的用法
  12. 十六进制转字符串 java_JAVA十六进制与字符串的转换方法
  13. 基于OP放大器的有源模拟滤波器设计--一阶有源滤波器
  14. 一文汇总卡方检验分析步骤
  15. 南京商品住宅全装修新政:毛坯、装修价格分别备案
  16. 【Mac使用技巧】Mac的VMware虚拟机系统时间如何调成不同步
  17. 嵌入式:ARM相关开发工具概述
  18. 为什么在 Google Play 发布应用很久了下载量却很少?
  19. 帆软大屏背景怎么设置_FineReport报表工具增加动态背景色
  20. Layui数据表格分页参数详解

热门文章

  1. JAVA复习(二维数组——快排——迷宫)
  2. linux学到了什么技术,Linux到底学什么?如何学?
  3. unix系统编码 java_Java 正确的做字符串编码转换
  4. java安全增加url_规范化String以在Java中创建安全URL
  5. eplan可运行于linux系统吗,Eplan安装对电脑操作系统的要求
  6. 拆解二战时期军用万用表,70多年前的万用表!
  7. 全国一等奖,他的学习之路。
  8. 服务器虚拟网络设置,虚拟化服务器网络设置
  9. ( )不是html的布局标签,不要使用的HTML标签(WEB标准网页布局)
  10. java default parameter_Java Parameter.DefaultBounds方法代码示例