Detecção de borda Canny
Introdução ao algoritmo astuto Supressão
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.
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
Use o algoritmo Canny sem calcular gradiente
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