目录

1. 介绍

2. Code


1. 介绍

Canny 边缘检测基于以下三个目标:

  • 低错误率。所有边缘都应该被找到,不应该有虚假响应
  • 边缘点应该更好的被定位。检测到的边缘和真实边缘之间的距离应该最小
  • 单个边缘点响应。对于真实的边缘点,检测子应该只返回一个点,

Canny边缘检测算法的步骤:

Canny 是基于一阶微分的

  1. 首先用高斯滤波平滑图像。
  2. 计算梯度幅值图像和方向角度图像
  3. 对梯度图像应用非极大值抑制
  4. 使用双阈值处理和连通性分析来检测连接边缘

首先,检测边缘前要平滑图像减少噪声的影响。这里采样的是高斯滤波器,高斯核的大小 >= 滤波器标准差的6倍取最小的奇整数

其次,需要用一阶导数计算幅值图像和角度图像。Canny检测是基于一阶导数的,所以这里使用的是一阶差分算子。

然后,对梯度图像进行非极大值抑制NMS(Non - Maxima Suppression)。根据第二步求出的角度图像,用该像素点 比较 在梯度方向和其反方向的像素点。如果该像素点的梯度幅值最大则保留;否则,删去。

最后,进行双阈值处理。用来确定真正的边缘和删去伪边缘

根据设置的两个阈值( 为低阈值  为高阈值),就会将幅值图像划为三部分,进行如下的分割

  • 像素点的响应强度是 >  的,那么认为是真正的边缘
  • 像素点的响应强度是 <   的,那么认为是伪边缘,删去
  • 如果介于两者之间,则检查周围的8领域,如果存在真正的边缘就保留,为了连接边缘。否则就删去

2. Code

opencv 里面Canny 的语法格式为:

注:

  • 彩色图像也可以
  • 高低阈值比例最后控制在2:1到3:1之间
  • L2gradient 为计算幅值图像的方式,默认为近似计算(绝对值代替平方和),设置为True的时候,采样精确的计算

代码演示:

import numpy as np
import cv2img = cv2.imread('./flower.jpg',0)dst = cv2.Canny(img,100,200)    # Canny 边缘检测cv2.imshow("img",np.hstack((img,dst)))
cv2.waitKey()
cv2.destroyAllWindows()

处理结果为:

图像分割 - Canny边缘检测相关推荐

  1. 图像算法八:【图像分割】边缘检测(Roberts,Sobel,canny)、霍夫变换(hough)、阈值分割、区域分割

    1.我们主要学习以下四种差分算子 Roberts算子 Sobel算子 Prewitt算子 canny算子 % Matlab图像边缘检测梯度算子–Roberts.Prewitt.Sobel.LOG.Ca ...

  2. 数字图像处理(九)图像分割之canny边缘检测

    本篇所有代码都是基于24位BMP图像. 且本篇代码只能算canny边缘检测的思路,可能离标准的canny边缘检测还差点. 1)        以低的错误率检测边缘,也即意味着需要尽可能准确的捕获图像中 ...

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

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

  4. opencv Canny边缘检测用法

    <span style="color:#000080">1. cv2.Canny(image, threshold1, threshold2[, edges[, ape ...

  5. OpenCV 笔记(03)— 读取视频、通过摄像头采集视频、采集视频 canny 边缘检测

    我们本节学习如何利用 OpenCV 中的 VideoCapture 类,来对视频进行读取显示,以及调用摄像头. VideoCapture 它提供了从摄像机或视频文件捕获视频的 C++ 接口, 作用是从 ...

  6. OpenCV 笔记(02)— 图像显示、保存、腐蚀、模糊、canny 边缘检测(imread、imshow、namedWindow、imwrite)

    OpenCV 提供两种用户界面选项: 基于原生用户界面的基本界面,适用于 Mac OS X 的 cocoa 或 carbon,以及适用于 Linux 或 Windows 用户界面的 GTK ,这些界面 ...

  7. OpenCV+python:Canny边缘检测算法

    1,边缘处理 图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用. 在空域运算中来说,对图像的锐化就是计算微分.由于数字 ...

  8. Python,Opencv cv2.Canny()边缘检测

    Python,Opencv的Canny边缘检测 1. 效果图 2. 源码 参考 这篇博客将介绍Canny边缘检测的概念,并利用cv2.Canny()实现边缘检测: Canny边缘检测是一种流行的边缘检 ...

  9. 【OpenCV 】Sobel 导数/Laplace 算子/Canny 边缘检测

    canny边缘检测见OpenCV [七]----边缘提取算子(图像边缘提取)--canny算法的原理及实现 1 Sobel 导数 1.1.1 原因 上面两节我们已经学习了卷积操作.一个最重要的卷积运算 ...

最新文章

  1. 配置Spring数据源c3p0与dbcp
  2. java 不用if_Java 不用for不用if写出九九乘法表算法
  3. Golang的导包和引用包的问题
  4. 就业模拟试题_Net(答案)
  5. 06-对图像进行腐蚀操作
  6. Python 按行读取文件内按分隔符分割字符串(去除空格和换行、字符串分割)
  7. Android 初探Retrofit2.0.1(最新版)
  8. python学习笔记(对象)
  9. 《C++编程——数据结构与程序设计方法》程序范例:影碟店(源代码)
  10. 读《JavaScript权威指南》笔记(三)--对象
  11. 什么是延展性(Malleability,可鍛性)
  12. 【网上订机票安全吗?网上订机票防止被骗妙招】
  13. win7 凭据管理无法保存
  14. 04 turtle库 | 发送小心心
  15. Flowable6.8(6.x版本通用)整合集成达梦8数据库(DM8)详解,解决自动生成表时dmn相关表语法报错问题。
  16. 代码:matlab求QR分解,QL分解,LQ分解和RQ分解。
  17. 微信企业号开发实例源码
  18. python列表嵌套元组拆分_Python进阶之元组拆包及嵌套元组拆包
  19. 2017.05.05FreeCodeCamp前端编程之Javascript实现laohuji
  20. html边框设置为背景同色,css边框与背景

热门文章

  1. a标签js阻止跳转_js阻止a标签href跳转的方法
  2. 2017年淘宝直通车“开车”技能汇总
  3. sketchup边线设置_SketchUp草图大师边线设置的两种方法
  4. 聊聊架构--读书笔记
  5. 那由多之轨迹 android,《那由多之轨迹》任务列表
  6. 爱美客暴利:靠卖玻尿酸9个月净利10亿 市值超900亿
  7. Mac m1 react native android 环境搭建跳坑
  8. Python之字符串删除指定字符
  9. CSS漂亮的盒子 - 背景颜色透明度
  10. WPF RichTextBox设置行间距