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自动格式化json文件的方法
Mar 11 Python
用yum安装MySQLdb模块的步骤方法
Dec 15 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
Jul 08 Python
python使用socket创建tcp服务器和客户端
Apr 12 Python
Pandas读取MySQL数据到DataFrame的方法
Jul 25 Python
对python中数组的del,remove,pop区别详解
Nov 07 Python
Django中在xadmin中集成DjangoUeditor过程详解
Jul 24 Python
python list数据等间隔抽取并新建list存储的例子
Nov 27 Python
Python安装依赖(包)模块方法详解
Feb 14 Python
Python读取VOC中的xml目标框实例
Mar 10 Python
Python unittest基本使用方法代码实例
Jun 29 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
Oct 28 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
日本因肺炎疫情影响,这几部动漫推延播放!
2020/03/03 日漫
jQuery+php实现ajax文件即时上传的详解
2013/06/17 PHP
PHP英文字母大小写转换函数小结
2014/05/03 PHP
PHP 获取ip地址代码汇总
2015/07/05 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
2019/05/27 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
2014/11/03 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
2015/04/15 Javascript
JavaScript实现简单的二级导航菜单实例
2015/04/15 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
2016/03/07 Javascript
使用jQuery制作Web页面遮罩层插件的实例教程
2016/05/26 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
2016/07/22 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
echarts统计x轴区间的数值实例代码详解
2019/07/07 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
python基础教程之基本内置数据类型介绍
2014/02/20 Python
python调用webservice接口的实现
2019/07/12 Python
python SVD压缩图像的实现代码
2019/11/05 Python
Python偏函数实现原理及应用
2020/11/20 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
详解CSS3的box-shadow属性制作边框阴影效果的方法
2016/05/10 HTML / CSS
英国婴儿和儿童服装网站:Vertbaudet
2018/04/02 全球购物
乌克兰网上珠宝商店:GoldSoveren
2020/03/31 全球购物
金山毒霸系列的笔试题
2013/04/13 面试题
基于Python 函数和方法的区别说明
2021/03/24 Python
业务部经理岗位职责
2014/01/04 职场文书
金融管理应届生求职信
2014/02/20 职场文书
《永远的白衣战士》教学反思
2014/04/25 职场文书
工程项目合作意向书
2015/05/08 职场文书
小学班主任工作经验交流材料
2015/11/02 职场文书
船舶调度指挥系统——助力智慧海事
2022/02/18 无线电