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定时检查某个进程是否已经关闭的方法
May 20 Python
Python的净值数据接口调用示例分享
Mar 15 Python
python实现简易版计算器
Jun 22 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
Oct 11 Python
celery4+django2定时任务的实现代码
Dec 23 Python
python内存管理机制原理详解
Aug 12 Python
关于Django Models CharField 参数说明
Mar 31 Python
浅析PyCharm 的初始设置(知道)
Oct 12 Python
详解Pycharm第三方库的安装及使用方法
Dec 29 Python
Python基础之函数嵌套知识总结
May 23 Python
简单介绍Python的第三方库yaml
Jun 18 Python
numpy array找出符合条件的数并赋值的示例代码
Jun 01 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
从Web查询数据库之PHP与MySQL篇
2009/09/25 PHP
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
PHP文章按日期(月日)SQL归档语句
2012/11/29 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
php生成txt文件标题及内容的方法
2014/01/16 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
laravel 实现设置时区的简单方法
2019/10/10 PHP
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
jquery插件之easing使用
2010/08/19 Javascript
js判断输入是否为正整数、浮点数等数字的函数代码
2010/11/17 Javascript
详解javascript跨浏览器事件处理程序
2016/03/27 Javascript
vue.js之vue-cli脚手架的搭建详解
2017/05/05 Javascript
jQuery手风琴的简单制作
2017/05/12 jQuery
node文件上传功能简易实现代码
2017/06/16 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
JavaScript封装单向链表的示例代码
2020/09/17 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
TensorFlow损失函数专题详解
2018/04/26 Python
numpy返回array中元素的index方法
2018/06/27 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
将python包发布到PyPI和制作whl文件方式
2019/12/25 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
凯蒂·佩里个人女鞋品牌:Katy Perry Collections
2019/04/04 全球购物
遗嘱公证书标准样本
2014/04/08 职场文书
桥梁工程专业求职信
2014/04/21 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
Go语言切片前或中间插入项与内置copy()函数详解
2021/04/27 Golang
有趣的二维码:使用MyQR和qrcode来制作二维码
2021/05/10 Python
pytorch 实现多个Dataloader同时训练
2021/05/29 Python
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL