Canny边缘检测方法被誉为边缘检测的最优方法。

import cv2
import numpy as np
img = cv2.imread('handwriting.jpg', 0)
edges = cv2.Canny(img, 30, 70) # canny边缘检测 cv2.imshow('canny', np.hstack((img, edges)))
cv2.waitKey(0)

cv2.Canny()进行边缘检测,参数2、参数3表示最低和最高阈值。

Canny边缘检测

具体步骤如下:

1. 使用5x5高斯滤波消除噪声:

边缘检测本身属于锐化操作,对噪声比较敏感,所以需要进行平滑处理。高斯滤波的具体内容参考前篇:OpenCV-Python教程9-平滑图像

2. 计算图像梯度的方向:

首先使用Sobel算子计算两个方向上的梯度Gx和Gy,然后算出梯度的方向:

保留这四个方向上的梯度:0°、45°、90°、135°

3. 取局部最大值:

在四个角度方向上取局部最大值

4. 滞后阈值

经过前面三步,剩下0和可能的边缘梯度值。通过设定两个阈值来筛选阈值:

  • 像素点的值大于最高阈值,那肯定是边缘(上图A)
  • 像素值小于最低阈值,那肯定不是边缘
  • 像素值介于两者之间,如果高于最高阈值的点连接,也算边缘。所以C算,B不算

Canny推荐的高低阈值比在 2 : 1 到 3 : 1 之间

先阈值分割后检测

很多情况下,先阈值分割后再检测边缘,效果会更好:

# 先阈值分割后检测
_, thresh = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) edges = cv2.Canny(thresh, 30, 70) cv2.imshow('canny', np.hstack((img, thresh, edges)))
cv2.waitKey(0)

参考地址:http://ex2tron.wang/opencv-python-edge-detection/

最新文章

  1. JQ图片轮播
  2. LocationManager使用细节
  3. xcode 6 创建的工程上下有黑边
  4. Ajax学习资源大全[本来是转载的,但是现在我增加了很多]
  5. UESTC 919 SOUND OF DESTINY --二分图最大匹配+匈牙利算法
  6. 从js的repeat方法谈js字符串与数组的扩展方法
  7. php 获取指定日期所在月份的最后一天
  8. 如何看懂Code128条形码
  9. JDK PATH 和 CLASSPATH环境变量的作用及其配置
  10. SMO要点总结
  11. MongoDB监控
  12. 深入理解Java虚拟机类加载机制
  13. 20190320_head first pyhton学习笔记之构建发布
  14. ASP.NET MVC 5 笔记
  15. deque-->collections之#双向消息队列
  16. 【codevs1048】石子归并(初级版)
  17. adb 安装apk到只当设备
  18. Java并发(一)-了解线程安全
  19. 用PowerDesigner对现有的数据库反向工程建立E-R图
  20. mvn test 执行testng测试用例

热门文章

  1. .Net Core实践3 配置文件
  2. Multi-View 3D Reconstruction with Geometry and Shading——Part-2
  3. k8s list
  4. nacos作为配置中心
  5. ansible-playbook用法
  6. python7 数据类型的相互转化 字符编码
  7. 079、监控利器 sysdig (2019-04-26 周五)
  8. 通过Hack方式实现SDC中Stage配置联动刷新
  9. Nginx 完全配置
  10. PMP知识点(二)——三点估算的两种方法对活动持续时间估算的影响和如何取舍