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代码(逐级优化)
May 25 Python
详解K-means算法在Python中的实现
Dec 05 Python
wxPython的安装与使用教程
Aug 31 Python
浅谈pyqt5中信号与槽的认识
Feb 17 Python
Python字符串的常见操作实例小结
Apr 08 Python
Scrapy-Redis结合POST请求获取数据的方法示例
May 07 Python
详解PyCharm+QTDesigner+PyUIC使用教程
Jun 13 Python
Django中Middleware中的函数详解
Jul 18 Python
Django框架 querySet功能解析
Sep 04 Python
python 实现提取log文件中的关键句子,并进行统计分析
Dec 24 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
Sep 11 Python
python实现三壶谜题的示例详解
Nov 02 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
ajax php 实现写入数据库
2009/09/02 PHP
destoon数据库表说明汇总
2014/07/15 PHP
PHP实现定时执行任务的方法
2014/10/05 PHP
PHP获取页面执行时间的方法(推荐)
2016/12/10 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
基于jquery的获取mouse坐标插件的实现代码
2010/04/01 Javascript
jQuery去掉字符串起始和结尾的空格(多种方法实现)
2013/04/01 Javascript
JS文本框追加多个下拉框的值的简单实例
2013/07/12 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
JSuggest自动匹配下拉框使用方法(示例代码)
2013/12/27 Javascript
javascript中验证大写字母、数字和中文
2014/01/15 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
2014/05/08 Javascript
IE6 hack for js 集锦
2014/09/23 Javascript
JS实现很酷的水波文字特效实例
2015/02/26 Javascript
JavaScript判断是否为数字的4种方法及效率比较
2015/04/01 Javascript
Java中Timer的用法详解
2015/10/21 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
vue组件tabbar使用方法详解
2018/11/06 Javascript
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
vue滚动tab跟随切换效果
2020/06/29 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
python简单读取大文件的方法
2016/07/01 Python
Python中Numpy mat的使用详解
2019/05/24 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
python pycharm的安装及其使用
2019/10/11 Python
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
毕业生求职简历中的自我评价
2013/10/18 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书