python opencv入门 Canny边缘检测(15)

来源:互联网 发布:网络交换器 编辑:程序博客网 时间:2024/05/15 06:10

内容来自OpenCV-Python Tutorials 自己翻译整理

目标

边缘检测的概念
opencv的函数cv2.Canny()

原理
Canny边缘检测很流行,在1986年提出

去除噪声
边缘检测容易受到噪声影响,一般第一步都是用5*5的高斯滤波器去除噪声

计算图像梯度

对平滑后的图像使用sobel算子在水平与竖直方向上计算一阶导数,得到图像梯度(Gx和Gy)。根据梯度图找到边界梯度和方向,公式如下:
这里写图片描述

梯度方向一般与边界垂直,有四类:垂直、水平、两个对角线。

非极大值抑制

获得图像梯度方向和大小以后,需要对全图像进行扫描去除不属于边界的点。
检查每一个像素,看此像素是否是周围具有相同梯度方向中最大的
这里写图片描述

A点在边界上(垂直方向),梯度方向是边界的法向量。点B和点C在梯度方向上面,所以点A检测点B和C是否形成了本地最大值,如果形成最大自,那么久进行下一步,否则进行抑制(赋值为0)
简单的说,得到了二值图像的边界。

滞后阈值
现在需要确定哪些边界是真正的边界,需要两个阈值,minVal和maxVal。图像灰度梯度 高于maxVal被认为是真正的边界,低于minVal的舍弃。两者之间的值要判断是否与真正的边界相连,相连就保留,不相连舍弃。
这里写图片描述
A高于maxVal,是真正边界。C低于maxVal,但是与真正边界相连,也认为是真正边界。B没有和真正阈值相连,而且低于maxVal,抛弃。

opencv使用canny

cv2.Canny()函数,第一个参数是输入图像,第二个和第三个参数是maxVal和minVal
函数原型是这样的

edge = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]])

apertureSize 为卷积核大小
L2gradient 参数设定求梯度大小的方程

import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('3.jpg',0)edges = cv2.Canny(img,100,200)plt.subplot(121),plt.imshow(img,cmap = 'gray')plt.title('Original Image'), plt.xticks([]), plt.yticks([])plt.subplot(122),plt.imshow(edges,cmap = 'gray')plt.title('Edge Image'), plt.xticks([]), plt.yticks([])plt.show()

这里写图片描述

练习
添加滚动条

import cv2import numpy as npfrom matplotlib import pyplot as pltdef nothing(x):    passcv2.namedWindow('res')cv2.createTrackbar('max','res',0,255,nothing)cv2.createTrackbar('min','res',0,255,nothing)img = cv2.imread('1.jpg',0)maxVal=200minVal=100while (1):    if cv2.waitKey(20) & 0xFF==27:        break    maxVal = cv2.getTrackbarPos('min','res')    minVal = cv2.getTrackbarPos('max','res')    if minVal < maxVal:        edge = cv2.Canny(img,100,200)        cv2.imshow('res',edge)    else:        edge = cv2.Canny(img,minVal,maxVal)        cv2.imshow('res',edge)cv2.destoryAllWindows()
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 做设计老是犯错怎么办 小学生阅读总出错怎么办 写作文没思路怎么办 孩子不爱写作文怎么办 写作文没有素材怎么办 写作文没有灵感怎么办 做事工作马虎粗心大意怎么办 小孩作业马虎粗心大意怎么办 孩子写字一直错怎么办 孩子写字老错怎么办 写错字涂黑了怎么办 写错字不能涂改怎么办 孩子爱写错别字怎么办 孩子读题马虎怎么办 孩子知错不该怎么办 小孩胆小反应慢怎么办 孩孑经常流鼻血怎么办 中考考号写错了怎么办 头后仰就头晕怎么办 感觉自己要晕倒怎么办 孩子不愿动手写字怎么办 老年人恶心想吐怎么办 小学生老写错别字怎么办 突然头晕站不稳 怎么办 早上起床突然天旋地转怎么办 躺着突然感觉天旋地转怎么办 眩晕症发作时怎么办 低血糖恶心想吐怎么办 更年期头晕头胀怎么办 年轻人头晕头胀怎么办 教案:《眯眼了怎么办》 迷路了怎么办活动意图 幼儿迷路了怎么办图片 中班迷路了怎么办教案 大门与大门相对怎么办 孩子长倒睫毛怎么办 孩子考倒数第一怎么办 孩子在班里倒数怎么办 宝宝不用吸管杯怎么办 婴儿发烧37.6度怎么办 宝宝体温37.2度怎么办