Canny边缘检测算法

目录

一、canny算法介绍五步

二、函数实现代码

 1、edge_output = cv.Canny(xgrad, ygrad, 50, 150)

 2、edge_output = cv.Canny(gray, 50, 150)


canny边缘检测算法是图像分析中较为重要的一步,在这篇文章主要介绍使用openCV API实现边缘检测算法

集体每一步如何详细实现的推荐:https://www.cnblogs.com/nowgood/p/cannyedge.html

一、canny算法介绍五步

  1. 高斯模糊,使用高斯滤波器,以平滑图像,滤除噪声——GaussianBlur

  2. 灰度转换——cvtClolor

  3. 计算图像中每个像素点的梯度强度和方向——Sobel/Scharr

  4. 非最大信号抑制,以消除边缘检测带来的杂散响应。

  5. 应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘

二、函数实现代码

由下面运行结果可以看出来,两种重载Canny()实现的效果相差不大

import cv2 as cv
import numpy as np


def edge_demo(image):
    blurred = cv.GaussianBlur(image, (3, 3), 0)#高斯模糊
    gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY)#灰度转换
    # X Gradient   计算梯度
    xgrad = cv.Sobel(gray, cv.CV_16SC1, 1, 0)
    # Y Gradient
    ygrad = cv.Sobel(gray, cv.CV_16SC1, 0, 1)
    #edge
    edge_output = cv.Canny(xgrad, ygrad, 50, 150)
    #edge_output = cv.Canny(gray, 50, 150)#注意这一步和上面一行一样都是做边缘检测,cv.Canny()算法重载了多种入参方式,会有不同的结果
    cv.imshow("Canny Edge", edge_output)

    dst = cv.bitwise_and(image, image, mask=edge_output)
    cv.imshow("Color Edge", dst)


print("--------- Python OpenCV Tutorial ---------")
src = cv.imread("D:/javaopencv/images/timg.jpg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
edge_demo(src)
cv.waitKey(0)

cv.destroyAllWindows()

 1、edge_output = cv.Canny(xgrad, ygrad, 50, 150)

Canny边缘检测算法_第1张图片

 2、edge_output = cv.Canny(gray, 50, 150)

Canny边缘检测算法_第2张图片

你可能感兴趣的:(Canny边缘检测算法)