Canny边缘提取

入门级必备!!!

  1. 高斯模糊
  2. 灰度转换
  3. 计算梯度
  4. 非最大梯度抑制
  5. 高低阈值输入二值化图像

相关代码

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和y方向的梯度
    # X Gradient
    xgrad = cv.Sobel(gray, cv.CV_16SC1, 1, 0)
    # Y Gradient
    ygrad = cv.Sobel(gray, cv.CV_16SC1, 0, 1)
    # edge9
    # 同时用x和y方向的梯度 下面的不用梯度也可以
    edge_output = cv.Canny(xgrad, ygrad, 50, 150) # 50为低阈值 150为高阈值
    # edge_output = cv.Canny(gray, 50, 150) # 不用梯度
    cv.imshow("Canny Edge", edge_output)
    # 与运算获得彩色的边界
    dst = cv.bitwise_and(image, image, mask=edge_output)
    cv.imshow("Color Edge", dst)


src = cv.imread("image20.jpg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
edge_demo(src)
cv.waitKey(0)

cv.destroyAllWindows()

效果展示