您的位置:首页 > 编程语言 > Python开发

opencv python 8 Canny边缘检测

2018-01-11 15:24 399 查看

opencv python 8 Canny边缘检测

Canny边缘检测算法分为以下几步:

去除噪声

边缘检测算法受噪声影响较大,所以先使用5x5的高斯滤波去除噪声。

计算图像梯度

经过高斯平滑的图像分别在水平和垂直方向上用sober算子计算得到一阶导数Gx和Gy,以及角度θ:



非极大值抑制

得到梯度大小和方向后扫描整张图像,移除不是边缘组成部分的像素。对每个像素,检查是否是梯度方向上邻域中的最大值。



对于点A,检查梯度方向上的相邻点B和C,若A是最大值则进入下一步,否则置为0。

阈值处理

对于给定的最大阈值和最小阈值,大于最大阈值的梯度必定为边缘,小于最小阈值的梯度必定不为边缘,对于中间部分,如果与必定为边缘的像素相连,则也视为边缘。



点A必定为边缘,C在最大最小阈值之间且与A相连所以视为边缘,B不为边缘。

在opencv中使用cv2.Canny()实现该检测算法。

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


edges:输出的边缘图像

image:输入图像

threshold1:第1个阈值

threshold2:第2个阈值,两个阈值中较小的作为最小阈值,较大的作为最大阈值

apertureSize:Sobel算子宽度,默认为3

L2gradient:是否使用L2梯度,默认为false

import cv2

img = cv2.imread('a.jpg', 0)

edges = cv2.Canny(img, 100, 200)
cv2.imshow('edges', edges)
cv2.waitKey()




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv