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单线程实现多个定时器示例
Mar 30 Python
在Python中操作列表之List.append()方法的使用
May 20 Python
python类装饰器用法实例
Jun 04 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
Dec 24 Python
基于python实现高速视频传输程序
May 05 Python
Django框架实现的分页demo示例
May 25 Python
详解如何减少python内存的消耗
Aug 09 Python
Tensorflow的常用矩阵生成方式
Jan 04 Python
利用python中集合的唯一性实现去重
Feb 11 Python
Python 为什么推荐蛇形命名法原因浅析
Jun 18 Python
Python使用protobuf序列化和反序列化的实现
May 19 Python
OpenCV-Python实现人脸美白算法的实例
Jun 11 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 中排序
2009/04/21 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
2010/08/21 PHP
php获得网站访问统计信息类Compete API用法实例
2015/04/02 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
jQuery 开天辟地入门篇一
2009/12/09 Javascript
js 数组操作之pop,push,unshift,splice,shift
2014/01/29 Javascript
js控制浏览器全屏示例代码
2014/02/20 Javascript
JSON.parse()和JSON.stringify()使用介绍
2014/06/20 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
浅谈js基本数据类型和typeof
2016/08/09 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
对layer弹出框中icon数字参数的说明介绍
2019/09/04 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
vue循环中点击选中再点击取消(单选)的实现
2020/09/10 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
python实现得到一个给定类的虚函数
2014/09/28 Python
深入浅析Python中join 和 split详解(推荐)
2016/06/30 Python
pytorch cnn 识别手写的字实现自建图片数据
2018/05/20 Python
python爬虫之遍历单个域名
2019/11/20 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
python使用建议技巧分享(三)
2020/08/18 Python
详解pandas apply 并行处理的几种方法
2021/02/24 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
项目合作计划书
2014/01/09 职场文书
物控部经理职务说明书
2014/02/25 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
企业安全生产责任书范本
2014/07/28 职场文书
代理词怎么写
2015/05/25 职场文书
大学生就业指导课心得体会
2016/01/15 职场文书
导游词之青岛崂山
2019/12/27 职场文书