opencv python Canny边缘提取实现过程解析


Posted in Python onFebruary 03, 2020

这篇文章主要介绍了opencv python Canny边缘提取实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Canny是边缘提取算法,在1986年提出的是一个很好的边缘检测器Canny算法介绍

opencv python Canny边缘提取实现过程解析

非最大信号抑制:

opencv python Canny边缘提取实现过程解析

高低阈值连接:

opencv python Canny边缘提取实现过程解析

example

import cv2 as cv
import numpy as np


# canny运算步骤:5步
# 1. 高斯模糊 - GaussianBlur
# 2. 灰度转换 - cvtColor
# 3. 计算梯度 - Sobel/Scharr
# 4. 非极大值抑制
# 5. 高低阈值输出二值图像

# 非极大值抑制:
# 算法使用一个3×3邻域作用在幅值阵列M[i,j]的所有点上;
# 每一个点上,邻域的中心像素M[i,j]与沿着梯度线的两个元素进行比较,
# 其中梯度线是由邻域的中心点处的扇区值ζ[i,j]给出。
# 如果在邻域中心点处的幅值M[i,j]不比梯度线方向上的两个相邻点幅值大,则M[i,j]赋值为零,否则维持原值;
# 此过程可以把M[i,j]宽屋脊带细化成只有一个像素点宽,即保留屋脊的高度值。

# 高低阈值连接
# T1,T2为阈值,凡是高于T2的都保留,凡是低于T1的都丢弃
# 从高于T2的像素出发,凡是大于T1而且相互连接的都保留。最终得到一个输出二值图像
# 推荐高低阈值比值为T2:T1 = 3:1/2:1,其中T2高阈值,T1低阈值


def edge_demo(image):
  blurred = cv.GaussianBlur(image, (3, 3), 0)
  gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY)

  grad_x = cv.Sobel(gray, cv.CV_16SC1, 1, 0)
  grad_y = cv.Sobel(gray, cv.CV_16SC1, 0, 1)

  # edge_output = cv.Canny(grad_x, grad_y, 30, 150)
  edge_output = cv.Canny(gray, 50, 150)
  cv.imshow("gray", gray)
  cv.imshow("Canny demo", edge_output)


def main():
  src = cv.imread("../images/Crystal.jpg")
  cv.imshow("demo",src)

  edge_demo(src)
  cv.waitKey(0) # 等有键输入或者1000ms后自动将窗口消除,0表示只用键输入结束窗口
  cv.destroyAllWindows() # 关闭所有窗口


if __name__ == '__main__':
  main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中time模块和datetime模块的用法示例
Feb 28 Python
浅谈python函数之作用域(python3.5)
Oct 27 Python
Python 中的range(),以及列表切片方法
Jul 02 Python
Python实现图片拼接的代码
Jul 02 Python
在Pycharm中调试Django项目程序的操作方法
Jul 17 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
Jan 18 Python
Tensorflow实现多GPU并行方式
Feb 03 Python
Python实现桌面翻译工具【新手必学】
Feb 12 Python
Python任务调度利器之APScheduler详解
Apr 02 Python
解决pytorch 数据类型报错的问题
Mar 03 Python
Pycharm 如何设置HTML文件自动补全代码或标签
May 21 Python
Python+Matplotlib+LaTeX玩转数学公式
Feb 24 Python
Pycharm debug调试时带参数过程解析
Feb 03 #Python
Python使用enumerate获取迭代元素下标
Feb 03 #Python
TensorFlow 显存使用机制详解
Feb 03 #Python
opencv python如何实现图像二值化
Feb 03 #Python
python实现人机猜拳小游戏
Feb 03 #Python
如何使用selenium和requests组合实现登录页面
Feb 03 #Python
检测tensorflow是否使用gpu进行计算的方式
Feb 03 #Python
You might like
php中转义mysql语句的实现代码
2011/06/24 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
PHP 第二节 数据类型之数值型
2012/04/28 PHP
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
php异步多线程swoole用法实例
2014/11/14 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
2018/05/28 PHP
IE和Firefox在JavaScript应用中的兼容性探讨
2008/04/01 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/03 Javascript
JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML
2012/09/14 Javascript
JavaScript学习笔记之内置对象
2015/01/22 Javascript
JQuery基础语法小结
2015/02/27 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
php+ajax+jquery实现点击加载更多内容
2015/05/03 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
基于jQuery实现仿51job城市选择功能实例代码
2016/03/02 Javascript
js实现分割上传大文件
2016/03/09 Javascript
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
JavaScript实现多层颜色选项卡嵌套
2020/09/21 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
2021/02/18 Vue.js
python sqlobject(mysql)中文乱码解决方法
2008/11/14 Python
python实现划词翻译
2020/04/23 Python
使用python3+xlrd解析Excel的实例
2018/05/04 Python
python语言的优势是什么
2020/06/17 Python
英国浴室洗脸盆购物网站:Click Basin
2018/06/08 全球购物
机械制造专业毕业生求职信
2014/03/02 职场文书
雷峰塔导游词
2015/02/09 职场文书
辞职信格式模板
2015/02/27 职场文书
综合办公室岗位职责
2015/04/11 职场文书
交通事故责任认定书
2015/08/06 职场文书
家访教师心得体会
2016/01/23 职场文书
对Golang中的FORM相关字段理解
2021/05/02 Golang
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
2021/05/22 Python