opencv learning fourteen: algoritmo de detecção de borda Canny

Detecção de borda Canny

Introdução ao algoritmo astuto Supressão
Insira a descrição da imagem aqui
não máxima: Ao obter o gradiente e a direção, remova todos os pontos que não são limites.
Direção de realização: Percorra gradualmente os pixels para determinar se o pixel atual é o valor máximo com o mesmo gradiente nos pixels circundantes. Está reservado, caso contrário, é 0.

Insira a descrição da imagem aquiInsira a descrição da imagem aqui
O código astuto implementa
bordas = cv2.Canny (imagem, limiar1, limiar2)
bordas:
imagem de resultado de processamento: imagem original
limiar1
: minVal limiar2: maxVal
Se quiser mais detalhes de limite, defina limiar1 e limiar2 menores.
código mostrado como abaixo:

import cv2 as cv
import numpy as np

def edge_demo(image):
    blurred = cv.GaussianBlur(image, (3, 3), 0)#为什么要GaussianBlur?
    #因为blur可以降低噪声,Canny算法对噪声敏感,降噪之后效果要好,也不能模糊太厉害,去掉了边缘信息。
    gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY)
    #X Gradient
    xgrad = cv.Sobel(gray, cv.CV_16SC1, 1, 0) #x和y方向的结果
    # Y Gradient
    ygrad = cv.Sobel(gray, cv.CV_16SC1, 0, 1)
    #edge
    edge_output = cv.Canny(xgrad, ygrad, 50, 150)#低阈值50.高阈值150
    #或者直接用cv.Canny
    #edge_output = cv.Canny(gray, 50, 150)#低阈值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("C:/Users/lenovo/Desktop/opencv/daima/banknum/template-matching-ocr/images/lena.jpg")  #读取图片位置
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
edge_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

Execute a captura de tela:
primeiro calcule o gradiente e, em seguida, use o algoritmo Canny
Insira a descrição da imagem aqui

Use o algoritmo Canny sem calcular gradiente
Insira a descrição da imagem aqui

borrado = cv.GaussianBlur (imagem, (3, 3), 0) #Gaussian Blur, reduza o ruído. Canny é mais sensível ao ruído e não pode borrar muito, removendo informações de borda.
edge_output = cv.Canny (xgrad, ygrad, 50, 150)
#edge_output = cv.Canny (cinza, 50, 150)
é o mesmo O
limite alto deve ser 3 vezes o limite baixo

Acho que você gosta

Origin blog.csdn.net/weixin_44145452/article/details/112764314
Recomendado
Clasificación