Opencv3.0-python的那些事儿:(七)、Opencv中Canny边缘检测算法使用

# coding: utf-8

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

'''
19章 Canny边缘检测
步骤:
1噪声去除
使用5*5的高斯滤波器
2计算图像梯度
对平滑后的图像使用Sobel算子计算水平方向和竖直方向的一阶导数(图像梯度)
(Gx和Gy)。根据得到的这两幅梯度图(Gx和Gy)找到边界的梯度和方向,公式如下
Edge_Gradient(G)=sqrt( Gx*Gx + Gy*Gy )

Angle(θ)= tan −1( Gx/Gy)
梯度方向一般总是与边界垂直(?),梯度方向被归为四类:垂直,水平,和两个对角线

3非极大值抑制
获得梯度方向和大小后,对整幅图像做扫描,去除非边界上的点。
对每一个像素检查,看这个点的梯度是不是周围具有相同梯度方向的
点中最大的

4滞后阈值
现在要确定那些边界才是真正的边界。这时我们需要设置两个阈值:
minVal 和 maxVal。当图像的灰度梯度高于 maxVal 时被认为是真的边界,
那些低于 minVal 的边界会被抛弃。如果介于两者之间的话,就要看这个点是
否与某个被确定为真正的边界点相连,如果是就认为它也是边界点,如果不是
就抛弃
'''

def Canny_test():
    img = cv2.imread("roi.jpg" , 0)
    '''
    cv2.Canny(image,threshold1 , threshold2[,edges])
    作用:根据Canny算法检测边界
    threshold1:minVal,threshold2:maxVal
    edges:设置卷积核的大小,L2gradient:默认使用近似值来代替所求的梯度
    '''
    edges = cv2.Canny(img , 100 , 200)
    plt.subplot(1,2,1) , plt.imshow(img , cmap="gray")
    plt.title("Original") , plt.xticks([]) , plt.yticks([])
    plt.subplot(1,2,2), plt.imshow(edges , cmap="gray")
    plt.title("Cannt") , plt.xticks([])  ,plt.yticks([])
    plt.show()

if __name__ == "__main__":
    Canny_test()


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值