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

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

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

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

Canny边缘检测的公式推导:

  1. 高斯滤波:对图像进行平滑处理
    在这里插入图片描述
  2. 计算梯度幅度和方向(采用Sobel算子)
    在这里插入图片描述
  3. 非极大值抑制
    在这里插入图片描述
    在这里插入图片描述
  4. 双阈值检测
    在这里插入图片描述

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'
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值