Canny边缘检测:

1)应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
2)应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
3)通过抑制孤立的弱边缘最终完成边缘检测。

1、非极大值抑制

线性插值法:设g1的梯度幅值M(g1),g2的梯度幅值M(g2),则dtmp1可以很得到:M(dtmp1)=w*M(g2)+(1-w)*M(g1)
其中w=distance(dtmp1,g2)/distance(g1,g2),  distance(g1,g2)表示两点之间的距离。

为了简化计算,由于一个像素周围有八个像素,把一个像素的梯度方向离散为八个方向,这样就只需计算前后即可,不用插值了。

2、双阈值检测

1)梯度值>maxVal:则处理为边界

如图水平直线maxVal即为该检测要求的上边界,超过maxVal的像素点(如图A点)则处理为边界

2)minVal<梯度值<maxVal:连有边界则保留,否则舍弃

如图在水平直线maxVal和水平直线minVal之间的像素点(如图B,C点),当像素点所在线性曲线连有边界(即C点)时,则保留该像素点;当像素点所在线性曲线没有连有边界(即B点)时,则舍弃该像素点

3)梯度值<minVal:则舍弃

如图水平直线minVal即为该检测要求的下边界,低于minVal的像素点(如图D点)则舍弃该像素点

根据上述描写保留像素点的检测方法,当maxVal越小、minVal越大(始终遵守maxVal>minVal)时,所保留的像素点数量越少,检测描绘的图像更加简洁但同时缺少细节;当maxVal越大、minVal越小时,所保留的像素点数量变多,检测描绘的图像增加更多细节但同时会因为像素点的增多导致图像的混乱模糊。下面来看一个实例:

import cv2
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline#创建显示图像的函数cv_show(name,img)来展示检测后的图像
def cv_show(name,img):cv2.imshow(name,img)cv2.waitKey(0)cv2.destroyAllWindows()
#读取电脑中的图像,并转换为灰白图片
img=cv2.imread("D:\\tu\lena.jpg",cv2.IMREAD_GRAYSCALE)
#设定两个检测标准,其中v1检测像素点较多,v2检测像素点较少
v1=cv2.Canny(img,140,210)
v2=cv2.Canny(img,50,100)
#将检测后的图像显示
res=np.hstack((v1,v2))
cv_show("res",res)

OpenCV边缘检测相关推荐

  1. 【OpenCV入门教程之十二】OpenCV边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/25560901 作者:毛星云(浅墨) ...

  2. OpenCV学习-P34-P38 Opencv边缘检测

    OpenCV学习-P34-P37 Opencv边缘检测 Sobel检测算子 Laplacian检测算子 Canny边缘检测算法 边缘检测总结 边缘检测分为两类:基于搜索和基于零穿越 基于搜索:寻找图像 ...

  3. Opencv边缘检测、轮廓发现、绘制轮廓

    Opencv边缘检测.轮廓发现.绘制轮廓 提取图像轮廓的2个步骤 1. findContours函数找轮廓, 2. drawContours函数画轮廓 轮廓的查找--cv::findContours( ...

  4. python opencv 边缘检测_opencv-python-学习笔记十四(Canny边缘检测)

    原理 Canny边缘检测是一种常用的边缘检测算法.由 John F. Canny提出 这是一个多阶段的算法,我们将经历每个阶段. 1.降低噪音 由于边缘检测容易受到图像中噪声的影响,第一步是用5x5高 ...

  5. opencv:边缘检测之Laplacian算子思想及实现

    Laplacian算子边缘检测的来源 在边缘部分求取一阶导数,你会看到极值的出现: 如果在边缘部分求二阶导数会出现什么情况? 从上例中我们可以推论检测边缘可以通过定位梯度值大于邻域的相素的方法找到(或 ...

  6. 【学习OpenCV4】OpenCV边缘检测算法总结

    本文分享内容来自图书<学习OpenCV 4:基于Python的算法实战>,该书内容如下: 第1章 OpenCV快速入门: 第2章 图像读写模块imgcodecs: 第3章 核心库模块cor ...

  7. opencv——边缘检测算法(总结)

    前言 笔记. 一.边缘检测算法 边缘检测算法是指利用灰度值的不连续性质,以灰度突变为基础分割出目标区域.对铝铸件表面进行成像后会产生一些带缺陷的区域,这些区域的灰度值比较低,与背景图像相比在灰度上会有 ...

  8. python opencv边缘检测

    通过Opencv进行边缘检测可以说是十分常见了,接下来让我们聊一聊如何通过python opencv一步一步实现边缘检测 重要函数讲解 图片读取函数: pic = cv2.imread(file_pa ...

  9. OpenCV 边缘检测

    一. 实验内容 用OpenCV对图片进行边缘检测. 二. 实验代码 //边缘检测 class Task17 { public:void deal() {Mat src_img = imread(&qu ...

  10. opencv边缘检测算子

    实验三 边缘检测算子 一. 实验目的 利用opencv或其他工具编写实现下图的sobel算子和robert算子边缘检测 二. 实验过程 利用opencv python实现sobel算子和robert算 ...

最新文章

  1. 互联网大脑如何产生“梦境“并形成元宇宙
  2. SQL output子句的用法
  3. 鸿蒙发布的意义,华为鸿蒙正式发布!“鸿蒙”是什么意思?
  4. Python回归模型评估
  5. html遮罩实例,给原生html中添加水印遮罩层的实现示例
  6. 内存缓存MemoryCache
  7. 红帽、微软和 Codenvy 联合推出语言服务器协定(Language Server Protocol,LSP)项目
  8. 多源计算机培训,多源数据汇聚的多流形学习算法研究
  9. 前端学习(903):js同步和异步
  10. 01.神经网络和深度学习 W3.浅层神经网络(作业:带一个隐藏层的神经网络)
  11. Hive-RCFile文件存储格式
  12. python的优点有哪些-python的优点和缺点是什么|python有哪些优缺点 - PS下
  13. 浅析2017快闪存储器涨势原因,AMOLED手机面板成主因?
  14. 51Nod-1486 大大走格子
  15. web player php,unity web player是什么软件
  16. 中国计算机学会推荐国际学术会议和期刊目录(2019)
  17. 苹果激活锁怎么解除?手把手教你关闭激活锁
  18. webstorm主题网址
  19. ROS : RoboWare Studio远程部署
  20. postgresql安装postgis扩展模块

热门文章

  1. Dijkstra 求单源最短路径
  2. C#使用winform做一个开关小游戏
  3. Python理解面向对象
  4. 手机怎么解压php文件夹,手机怎么解压文件
  5. 长江后浪推前浪-南航华为通信俱乐部招新
  6. 如何用matlab快速入门,科学网—MATLAB快速入门 - 李海鑫的博文
  7. 【小5聊】Git安装出现错误解决方法,fatal: bad config line 10 in file xxx/.gitconfig
  8. 【LittleVGL】仪表guage函数 lv_gauge_set_scale
  9. dplyr包功能(数据清理、过滤、合并R实现)
  10. html八数码问题求解过程的可视化,(转贴)数字拼图问题(八数码)求解过程动态演示...