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 socket网络编程步骤详解(socket套接字使用)
Dec 06 Python
从零学Python之入门(三)序列
May 25 Python
Python随机生成信用卡卡号的实现方法
May 14 Python
win10系统中安装scrapy-1.1
Jul 03 Python
python实现监控某个服务 服务崩溃即发送邮件报告
Jun 21 Python
python3 面向对象__类的内置属性与方法的实例代码
Nov 09 Python
python获取交互式ssh shell的方法
Feb 14 Python
pycharm新建Vue项目的方法步骤(图文)
Mar 04 Python
浅谈keras 的抽象后端(from keras import backend as K)
Jun 16 Python
python批量处理多DNS多域名的nslookup解析实现
Jun 28 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
Jul 30 Python
Django项目创建及管理实现流程详解
Oct 13 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
sony ICF-2010 拆解与改装
2021/03/02 无线电
一棵php的类树(支持无限分类)
2006/10/09 PHP
PHP 函数学习简单小结
2010/07/08 PHP
php数字运算验证码的实现代码
2015/07/30 PHP
PHP中使用OpenSSL生成证书及加密解密
2017/02/05 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
2020/02/12 PHP
JavaScript下利用fso判断文件是否存在的代码
2010/12/11 Javascript
js的[defer]和[async]属性
2014/11/24 Javascript
浅谈Javascript 数组与字典
2015/01/29 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
jquery实现可自动判断位置的弹出层效果代码
2015/10/12 Javascript
AngularJs Managing Service Dependencies详解
2016/09/02 Javascript
仿iframe效果Aajx文件上传实例
2016/11/18 Javascript
Python FTP操作类代码分享
2014/05/13 Python
python中对list去重的多种方法
2014/09/18 Python
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
python3下实现搜狗AI API的代码示例
2018/04/10 Python
python 以16进制打印输出的方法
2018/07/09 Python
python如何生成网页验证码
2018/07/28 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
Python pandas 列转行操作详解(类似hive中explode方法)
2020/05/18 Python
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
医学生个人求职信范文
2013/09/24 职场文书
人事科岗位职责范本
2014/03/02 职场文书
协议书样本
2014/04/23 职场文书
计算机网络专业自荐信
2014/07/04 职场文书
政协会议宣传标语
2014/10/09 职场文书
信贷客户经理岗位职责
2015/04/09 职场文书
公司欠款证明
2015/06/24 职场文书
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL
python解析json数据
2022/04/29 Python