python opencv实现图像边缘检测


Posted in Python onApril 29, 2019

本文利用python opencv进行图像的边缘检测,一般要经过如下几个步骤:

1、去噪

如cv2.GaussianBlur()等函数;

2、计算图像梯度

图像梯度表达的是各个像素点之间,像素值大小的变化幅度大小,变化较大,则可以认为是出于边缘位置,最多可简化为如下形式:

python opencv实现图像边缘检测

3、非极大值抑制

在获得梯度的方向和大小之后,应该对整幅图像做一个扫描,去除那些非边界上的点。对每一个像素进行检查,看这个点的梯度是不是周围具有相同梯度方向的点中最大的。如下图所示:

python opencv实现图像边缘检测

4、滞后阈值

现在要确定那些边界才是真正的边界。这时我们需要设置两个阈值:minVal 和maxVal。当图像的灰度梯度高于maxVal 时被认为是真的边界,那些低于minVal 的边界会被抛弃。如果介于两者之间的话,就要看这个点是否与某个被确定为真正的边界点相连,如果是就认为它也是边界点,如果不是就抛弃。如下图:

python opencv实现图像边缘检测

在Python Opencv接口中,提供了Canny函数,可以对图像进行一键执行边缘检测。 

接下来,利用Canny函数进行边缘检测的实验。

Canny函数需要指定几个参数:

1、需要进行边缘检测的原图
2、阈值下限
3、阈值上限

我们为了能够看到不同阈值范围对边缘检测结果的影响,设置了两个滑动条,来分别表示阈值上下限。

完整代码如下:

# -*- coding: utf-8 -*-
"""
Created on Thu Sep 13 14:23:32 2018
@author: Leon
内容:
对图片进行边缘检测;
添加滑动条,可自由调整阈值上下限。
"""
 
import cv2
import numpy as np
 
def nothing(x):
  pass
 
cv2.namedWindow('Canny',0)
# 创建滑动条
cv2.createTrackbar('minval','Canny',0,255,nothing)
cv2.createTrackbar('maxval','Canny',0,255,nothing)
 
img = cv2.imread('Tree.jpg',0)
 
# 高斯滤波去噪
img = cv2.GaussianBlur(img,(3,3),0)
edges =img
 
k=0
while(1):
 
  key = cv2.waitKey(50) & 0xFF
  if key == ord('q'):
    break
  # 读取滑动条数值
  minval = cv2.getTrackbarPos('minval','Canny')
  maxval = cv2.getTrackbarPos('maxval','Canny')
  edges = cv2.Canny(img,minval,maxval)
  
  # 拼接原图与边缘监测结果图
  img_2 = np.hstack((img,edges))
  cv2.imshow('Canny',img_2)
 
cv2.destroyAllWindows()

效果如图:

python opencv实现图像边缘检测

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

Python 相关文章推荐
python两种遍历字典(dict)的方法比较
May 29 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
Jan 20 Python
Python如何生成树形图案
Jan 03 Python
python 读取修改pcap包的例子
Jul 23 Python
用Python徒手撸一个股票回测框架搭建【推荐】
Aug 05 Python
python实现简单坦克大战
Mar 27 Python
Python PyQt5模块实现窗口GUI界面代码实例
May 12 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 Python
python中selenium库的基本使用详解
Jul 31 Python
celery在python爬虫中定时操作实例讲解
Nov 27 Python
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
Apr 06 Python
python中if和elif的区别介绍
Nov 07 Python
Python Django给admin添加Action的方法实例详解
Apr 29 #Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
Apr 29 #Python
Python opencv实现人眼/人脸识别以及实时打码处理
Apr 29 #Python
python实现微信每日一句自动发送给喜欢的人
Apr 29 #Python
详解【python】str与json类型转换
Apr 29 #Python
python实现给微信指定好友定时发送消息
Apr 29 #Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 #Python
You might like
php分页函数完整实例代码
2014/09/22 PHP
laradock环境docker-compose操作详解
2019/07/29 PHP
Avengerls vs Newbee BO3 第二场2.18
2021/03/10 DOTA
解决 FireFox 下[使用event很麻烦] 的问题.
2006/08/22 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
点击显示指定元素隐藏其他同辈元素的方法
2014/02/19 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
javascript在IE下trim函数无法使用的解决方法
2014/09/12 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
js判断手机号是否正确并返回的实现代码
2017/01/17 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
在vue中使用Autoprefixed的方法
2018/07/27 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
2018/11/13 Javascript
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
深入理解Vue keep-alive及实践总结
2019/08/21 Javascript
JS实现页面跳转与刷新的方法汇总
2019/08/30 Javascript
详解基于Vue的支持数据双向绑定的select组件
2019/09/02 Javascript
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
Python之reload流程实例代码解析
2018/01/29 Python
python3去掉string中的标点符号方法
2019/01/22 Python
python安装pywin32clipboard的操作方法
2019/01/24 Python
Python基本socket通信控制操作示例
2019/01/30 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
美国瑜伽服装和装备购物网站:Mukha Yoga
2019/02/22 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
创立科技Java面试题
2015/11/29 面试题
会计工作心得体会
2014/01/13 职场文书
岗位廉洁从业承诺书
2014/03/28 职场文书
图书借阅制度范本
2015/08/06 职场文书
JavaWeb 入门篇(3)ServletContext 详解 具体应用
2021/07/16 Java/Android