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爬虫之urllib2中的两个重要概念:Openers和Handlers
Nov 05 Python
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
Mar 30 Python
Python实现程序的单一实例用法分析
Jun 03 Python
python列表的常用操作方法小结
May 21 Python
Python机器学习logistic回归代码解析
Jan 17 Python
Linux下python制作名片示例
Jul 20 Python
numpy基础教程之np.linalg
Feb 12 Python
Python.append()与Python.expand()用法详解
Dec 18 Python
python使用rsa非对称加密过程解析
Dec 28 Python
快速查找Python安装路径方法
Feb 06 Python
Django nginx配置实现过程详解
Sep 10 Python
python基础之函数的定义和调用
Oct 24 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
全国FM电台频率大全 - 21 海南省
2020/03/11 无线电
提升PHP执行速度全攻略(下)
2006/10/09 PHP
PHP的FTP学习(三)
2006/10/09 PHP
用PHP中的 == 运算符进行字符串比较
2006/11/26 PHP
基于php在各种web服务器的运行模式详解
2013/06/03 PHP
ThinkPHP 404页面的设置方法
2015/01/14 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
2016/01/08 PHP
js或css文件后面跟参数的原因说明
2010/01/09 Javascript
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
js获取html文件的思路及示例
2013/09/17 Javascript
js实现遮罩层弹出框的方法
2015/01/15 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
浅析JavaScript动画
2015/06/10 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
Node.js中常规的文件操作总结
2016/10/13 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
vue-router的钩子函数用法实例分析
2019/10/26 Javascript
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
Python 利用内置set函数对字符串和列表进行去重的方法
2018/06/29 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
2021/01/09 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
意大利团购网站:Groupon意大利
2016/10/11 全球购物
BrandAlley英国:法国折扣奢侈品网上零售商
2017/07/03 全球购物
社会实践感言
2014/01/25 职场文书
先进工作者获奖感言
2014/02/08 职场文书
房产公证书范本
2014/04/10 职场文书
让生命充满爱演讲稿
2014/05/10 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
导游词之山海关
2019/12/10 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
正则表达式拆分url实例代码
2022/02/24 Java/Android