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类的专用方法实例分析
Jan 09 Python
python使用tensorflow深度学习识别验证码
Apr 03 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
Jun 03 Python
python每天定时运行某程序代码
Aug 16 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
浅谈Django+Gunicorn+Nginx部署之路
Sep 11 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
Mar 02 Python
Python logging日志模块 配置文件方式
Jul 12 Python
Python 列表推导式需要注意的地方
Oct 23 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
Dec 14 Python
python空元组在all中返回结果详解
Dec 15 Python
Jupyter Notebook内使用argparse报错的解决方案
Jun 03 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
PHP伪静态页面函数附使用方法
2008/06/20 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
2014/06/23 PHP
thinkPHP框架实现生成条形码的方法示例
2018/06/06 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
jQuery EasyUI API 中文文档 - DataGrid数据表格
2011/11/17 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
2013/04/26 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
基于jquery插件实现常见的幻灯片效果
2013/11/01 Javascript
window.location.href IE下跳转失效的解决方法
2014/03/27 Javascript
jQuery窗口、文档、网页各种高度的精确理解
2014/07/02 Javascript
多个$(document).ready()的执行顺序实例分析
2014/07/26 Javascript
jQuery实现列表自动滚动循环滚动展示新闻
2014/08/22 Javascript
JavaScript数组常用操作技巧汇总
2014/11/17 Javascript
DOM基础教程之使用DOM设置文本框
2015/01/20 Javascript
基于bootstrap实现广告轮播带图片和文字效果
2016/07/22 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
AngularJs  E2E Testing 详解
2016/09/02 Javascript
Bootstrap菜单按钮及导航实例解析
2016/09/09 Javascript
详解js删除数组中的指定元素
2018/10/31 Javascript
axios实现简单文件上传功能
2019/09/25 Javascript
Python tkinter模块弹出窗口及传值回到主窗口操作详解
2017/07/28 Python
Python程序员面试题 你必须提前准备!
2018/01/16 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
对python中的*args与**kwgs的含义与作用详解
2019/08/28 Python
Python如何使用函数做字典的值
2019/11/30 Python
Python数据持久化存储实现方法分析
2019/12/21 Python
python3实现简单飞机大战
2020/11/29 Python
python drf各类组件的用法和作用
2021/01/12 Python
Urban Outfitters美国官网:美国生活方式品牌
2016/08/26 全球购物
英国最大的户外商店:Go Outdoors
2019/04/17 全球购物
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
党员个人对照检查材料范文
2014/09/24 职场文书
诚实守信主题班会
2015/08/13 职场文书
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL