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去除列表中重复元素的方法
Mar 20 Python
python 统计代码行数简单实例
May 04 Python
Python实现自动登录百度空间的方法
Jun 10 Python
python求质数的3种方法
Sep 28 Python
Django框架实现的分页demo示例
May 25 Python
Django文件存储 默认存储系统解析
Aug 02 Python
详解python 破解网站反爬虫的两种简单方法
Feb 09 Python
django自定义非主键自增字段类型详解(auto increment field)
Mar 30 Python
Flask缓存静态文件的具体方法
Aug 02 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
Sep 01 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
Sep 16 Python
Python Serial串口基本操作(收发数据)
Nov 06 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
杏林同学录(三)
2006/10/09 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
PHP中使用asort进行中文排序失效的问题处理
2014/08/18 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
取得父标签
2006/11/14 Javascript
JS解析XML的实现代码
2009/11/12 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
JavaScript?Apple设备检测示例代码
2013/11/15 Javascript
JQuery记住用户名密码实现下次自动登录功能
2015/04/27 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
2016/03/01 Javascript
Ionic实现页面下拉刷新(ion-refresher)功能代码
2016/06/03 Javascript
微信小程序 闭包写法详细介绍
2016/12/14 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
2017/01/17 Javascript
vue组件之Alert的实现代码
2017/10/17 Javascript
js判断数组是否包含某个字符串变量的实例
2017/11/24 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
2018/07/09 Javascript
webpack4 CSS Tree Shaking的使用
2018/09/03 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
Vue+Express实现登录状态权限验证的示例代码
2019/05/05 Javascript
python 测试实现方法
2008/12/24 Python
python定时器(Timer)用法简单实例
2015/06/04 Python
Django中对通过测试的用户进行限制访问的方法
2015/07/23 Python
Python + selenium自动化环境搭建的完整步骤
2018/05/19 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
Python根据当前日期取去年同星期日期
2019/04/14 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
Pytorch训练过程出现nan的解决方式
2020/01/02 Python
Python while true实现爬虫定时任务
2020/06/08 Python
高级技校毕业生自荐信
2013/11/18 职场文书
体育老师的教学自我评价分享
2013/11/19 职场文书
2015年计划生育责任书
2015/05/08 职场文书
python爬取新闻门户网站的示例
2021/04/25 Python
二维码条形码生成的JavaScript脚本库
2022/07/07 Javascript