博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV-Python-边缘检测
阅读量:6154 次
发布时间:2019-06-21

本文共 852 字,大约阅读时间需要 2 分钟。

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

import cv2import 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高斯滤波消除噪声:

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

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)

 

 

转载于:https://www.cnblogs.com/gezhuangzhuang/p/10711201.html

你可能感兴趣的文章
五、字典
查看>>
前端js之JavaScript
查看>>
Log4J日志配置详解
查看>>
实验7 BindService模拟通信
查看>>
scanf
查看>>
Socket编程注意接收缓冲区大小
查看>>
SpringMVC初写(五)拦截器
查看>>
检测oracle数据库坏块的方法
查看>>
SQL server 安装教程
查看>>
Linux下ftp和ssh详解
查看>>
跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击
查看>>
js时间和时间戳之间如何转换(汇总)
查看>>
js插件---图片懒加载echo.js结合 Amaze UI ScrollSpy 使用
查看>>
java中string和int的相互转换
查看>>
P1666 前缀单词
查看>>
HTML.2文本
查看>>
Ubuntu unity安装Indicator-Multiload
查看>>
解决Eclipse中新建jsp文件ISO8859-1 编码问题
查看>>
7.对象创建型模式-总结
查看>>
【论文阅读】Classification of breast cancer histology images using transfer learning
查看>>