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 01 Python
Python lxml模块安装教程
Jun 02 Python
使用Python写CUDA程序的方法
Mar 27 Python
Python模拟用户登录验证
Sep 11 Python
解决python3中cv2读取中文路径的问题
Dec 05 Python
详解Django-restframework 之频率源码分析
Feb 27 Python
详解如何减少python内存的消耗
Aug 09 Python
浅谈Django2.0 加xadmin踩的坑
Nov 15 Python
Python写捕鱼达人的游戏实现
Mar 31 Python
解决Django响应JsonResponse返回json格式数据报错问题
Aug 09 Python
利用Python将图片中扭曲矩形的复原
Sep 07 Python
python用字节处理文件实例讲解
Apr 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
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
2014/11/08 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
PHP chr()函数讲解
2019/02/11 PHP
javascript 自动填写表单的实现方法
2010/04/09 Javascript
使用基于jquery的gamequery插件做JS乒乓球游戏
2011/07/31 Javascript
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
js实现九宫格图片半透明渐显特效的方法
2015/02/16 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
基于javascript实现表格的简单操作
2016/05/21 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
nodejs根据ip数组在百度地图中进行定位
2017/03/06 NodeJs
jQuery tip提示插件(实例分享)
2017/04/28 jQuery
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
js replace 全局替换的操作方法
2018/06/12 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
layui table 多行删除(id获取)的方法
2019/09/12 Javascript
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
python实现图片转字符小工具
2019/04/30 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
详解Python Opencv和PIL读取图像文件的差别
2019/12/27 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
Pytorch maxpool的ceil_mode用法
2020/02/18 Python
Python如何在main中调用函数内的函数方式
2020/06/01 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
业务员岗位职责范本
2013/12/15 职场文书
孝老爱亲模范事迹
2014/01/24 职场文书
潘婷洗发水广告词
2014/03/14 职场文书
旅游活动总结
2014/08/27 职场文书
行政人事主管岗位职责
2015/04/11 职场文书
2015年国培研修感言
2015/08/01 职场文书
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers
Django使用redis配置缓存的方法
2021/06/01 Redis