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中3种内建数据结构:列表、元组和字典
Nov 30 Python
python根据出生年份简单计算生肖的方法
Mar 27 Python
Django的数据模型访问多对多键值的方法
Jul 21 Python
分享python数据统计的一些小技巧
Jul 21 Python
Python实现将Excel转换为json的方法示例
Aug 05 Python
Python中类的创建和实例化操作示例
Feb 27 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
PyQt5下拉式复选框QComboCheckBox的实例
Jun 25 Python
使用python去除图片白色像素的实例
Dec 12 Python
tensorflow的计算图总结
Jan 12 Python
TFRecord格式存储数据与队列读取实例
Jan 21 Python
python 通过文件夹导入包的操作
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
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
PHP清除缓存的几种方法总结
2017/09/12 PHP
Laravel学习教程之model validation的使用示例
2017/10/23 PHP
总结PHP中初始化空数组的最佳方法
2019/02/13 PHP
jquery动态改变div宽度和高度
2015/02/09 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
2016/04/17 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
JavaScript易错知识点整理
2016/12/05 Javascript
微信小程序 数据遍历的实现
2017/04/05 Javascript
微信小程序 商城开发(ecshop )简单实例
2017/04/07 Javascript
基于JavaScript实现的折半查找算法示例
2017/04/14 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
11行JS代码制作二维码生成功能
2018/03/09 Javascript
在Vue-cli里应用Vuex的state和mutations方法
2018/09/16 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
2020/04/27 Javascript
python统计cpu利用率的方法
2015/06/02 Python
python实现FTP服务器服务的方法
2017/04/11 Python
python 中random模块的常用方法总结
2017/07/08 Python
CentOS中升级Python版本的方法详解
2017/07/10 Python
Python标准库之itertools库的使用方法
2017/09/07 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
Python实现链表反转的方法分析【迭代法与递归法】
2020/02/22 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
英国最大的户外商店:Go Outdoors
2019/04/17 全球购物
文明家庭先进事迹材
2014/01/27 职场文书
保险公司早会主持词
2014/03/22 职场文书
乡镇党的群众路线对照检查材料
2014/09/24 职场文书
党的群众路线教育实践活动党员个人剖析材料
2014/10/08 职场文书
单方离婚协议书范本2014
2014/10/28 职场文书
2015新学期家长寄语
2015/02/26 职场文书
公司岗位说明书
2015/10/08 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js