美文网首页OpenCV
OpenCV-Python教程:16.Canny边缘检测

OpenCV-Python教程:16.Canny边缘检测

作者: xxxss | 来源:发表于2017-06-15 14:14 被阅读366次

原理

Canny 边缘检测是一个很流行的边缘检测算法。由John F.Canny在1986年开发。这是一个多步骤的算法。

1.降噪

由于边缘检测易受图片的噪点影响,第一步就是用一个5x5的高斯滤波器去除图片上的噪点。

2.找到图片中的亮度梯度

平滑过的图片会被索贝尔核在水平和垂直方向过滤得到水平方向导数Gx和垂直方向导数Gy。从这两个图像我们可以找到边缘梯度和方向

梯度方向始终和边缘垂直。

3.非最大值抑制

4.

这一步决定哪些是真边缘哪些不是。为了这个,我们需要两个阈值,minVal和maxVal。

OpenCV里的Canny边缘检测

OpenCV把所有这些放在一个函数里,cv2.Canny()。第一个参数是输入图片,第二个和第三个参数是我们的minVal 和maxVal。aperture_size参数是索贝尔核的大小,用来找图片的梯度。默认是3,最后一个参数是L2gradient,指定了找梯度幅值的公式。如果为真,他使用了更准确的,否则会用这个函数:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('messi5.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()

相关文章

网友评论

    本文标题:OpenCV-Python教程:16.Canny边缘检测

    本文链接:https://www.haomeiwen.com/subject/vbhljttx.html