【算法】基于OpenCV的Canny边缘检测算法

Canny边缘检测算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法。更为重要的是 Canny 创立了边缘检测计算理论解释这项技术如何工作。

Canny边缘检测算法可以分为以下5个步骤:

  • 应用高斯滤波来平滑图像,目的是去除噪声
  • 找寻图像的强度梯度(intensity gradients)
  • 应用非最大抑制(non-maximum suppression)技术来消除边误检(本来不是但检测出来是)
  • 应用双阈值的方法来决定可能的(潜在的)边界
  • 利用滞后技术来跟踪边界

Canny边缘检测的公式推导:

  1. 高斯滤波:对图像进行平滑处理
    【算法】基于OpenCV的Canny边缘检测算法_第1张图片
  2. 计算梯度幅度和方向(采用Sobel算子)
    【算法】基于OpenCV的Canny边缘检测算法_第2张图片
  3. 非极大值抑制
    【算法】基于OpenCV的Canny边缘检测算法_第3张图片
    【算法】基于OpenCV的Canny边缘检测算法_第4张图片
  4. 双阈值检测
    【算法】基于OpenCV的Canny边缘检测算法_第5张图片

Canny算法代码实现

#opencv读取的格式是BGR
import cv2 
import numpy as np
#Matplotlib是RGB
import matplotlib.pyplot as plt
%matplotlib inline 
#显示图像的函数
def cv_show(img,name):
    cv2.imshow(name,img)
    cv2.waitKey()
    cv2.destroyAllWindows()
#读取图像
img=cv2.imread("lena.jpg",cv2.IMREAD_GRAYSCALE)

#80 和150 分别为最大和最小的阈值,当阈值比较的大获取较少的边缘 阈值较大获取较多的边缘信息
v1=cv2.Canny(img,80,150)  
v2=cv2.Canny(img,50,100)
#hstark:横向输出两张图片
res = np.hstack((v1,v2))
cv_show(res,'res'

你可能感兴趣的:(算法,python,opencv)