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列表推导式的使用方法
Nov 21 Python
Python的迭代器和生成器使用实例
Jan 14 Python
Python实现国外赌场热门游戏Craps(双骰子)
Mar 31 Python
详解Python中for循环是如何工作的
Jun 30 Python
浅谈python3.6的tkinter运行问题
Feb 22 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
python opencv 实现读取、显示、写入图像的方法
Jun 08 Python
浅谈Python 钉钉报警必备知识系统讲解
Aug 17 Python
Python 字典一个键对应多个值的方法
Sep 29 Python
详解Python Celery和RabbitMQ实战教程
Jan 20 Python
 分享一个Python 遇到数据库超好用的模块
Apr 06 Python
Python之Matplotlib绘制热力图和面积图
Apr 13 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
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
CI框架常用方法小结
2016/05/17 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
Document 对象的常用方法
2009/07/31 Javascript
JavaScript中的闭包原理分析
2010/03/08 Javascript
JavaScript获取onclick、onchange等事件值的代码
2013/07/22 Javascript
纯js实现重发验证码按钮倒数功能
2015/04/21 Javascript
JavaScript判断undefined类型的正确方法
2015/06/30 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
2015/08/21 Javascript
js实现带圆角的多级下拉菜单效果
2015/08/28 Javascript
Angular设置title信息解决SEO方面存在问题
2016/08/19 Javascript
AngularJS下对数组的对比分析
2016/08/24 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
基于Python的关键字监控及告警
2017/07/06 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
浅谈Python在pycharm中的调试(debug)
2018/11/29 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
2019/08/05 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
python 解决print数组/矩阵无法完整输出的问题
2020/02/19 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
2020/12/14 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
2021/01/05 Python
python中numpy.empty()函数实例讲解
2021/02/05 Python
HTML5实现经典坦克大战坦克乱走还能发出一个子弹
2013/09/02 HTML / CSS
AE美国鹰日本官方网站: American Eagle Outfitters
2016/12/10 全球购物
某公司.Net方向面试题
2014/04/24 面试题
企业消防安全制度
2014/02/02 职场文书
篮球比赛口号
2014/06/10 职场文书
公务员政审材料范文
2014/12/23 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
企业培训简报范文
2015/07/20 职场文书