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简单进程锁代码实例
Apr 27 Python
详解python的几种标准输出重定向方式
Aug 15 Python
详解Python读取配置文件模块ConfigParser
May 11 Python
windows下python安装pip图文教程
May 25 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
Jun 22 Python
python2 与 python3 实现共存的方法
Jul 12 Python
python字符串Intern机制详解
Jul 01 Python
python 自动轨迹绘制的实例代码
Jul 05 Python
Pytorch之contiguous的用法
Dec 31 Python
django的模型类管理器——数据库操作的封装详解
Apr 01 Python
python中的unittest框架实例详解
Feb 05 Python
Python OpenCV实现图像模板匹配详解
Apr 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 object转数组示例
2014/01/15 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
2019/06/19 PHP
JavaScript 异步调用框架 (Part 1 - 问题 & 场景)
2009/08/03 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
js控制当再次点击按钮时的间隔时间
2014/06/03 Javascript
javascript实现日期按月份加减
2015/05/15 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
2016/01/22 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
2016/05/12 Javascript
深入理解Angular4中的依赖注入
2017/06/07 Javascript
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
2020/02/24 Javascript
Vue watch响应数据实现方法解析
2020/07/10 Javascript
JavaScript封装单向链表的示例代码
2020/09/17 Javascript
[01:05:59]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
Python去掉字符串中空格的方法
2014/03/11 Python
python统计一个文本中重复行数的方法
2014/11/19 Python
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
Python读取指定日期邮件的实例
2019/02/01 Python
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
2019/11/19 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
2020/03/30 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
Python urllib3软件包的使用说明
2020/11/18 Python
美国羽绒床上用品第一品牌:Pacific Coast
2018/08/25 全球购物
个人找工作自荐信格式
2013/09/21 职场文书
思想品德评语大全
2014/12/31 职场文书
加薪通知
2015/04/25 职场文书
在校生证明
2015/06/17 职场文书
2016党员学习心得体会范文
2016/01/23 职场文书
用几道面试题来看JavaScript执行机制
2021/04/30 Javascript
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏