es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo usar Canny correctamente?

Tengo una imagen con una resolución de 2560×1920. Estoy aplicando el operador de Canny a ella. Pero el resultado que obtengo no me conviene. Quiero que todos los bordes destaquen. Sin embargo, cuando aplico este algoritmo a imágenes de menor resolución, todo funciona correctamente. ¿Cómo puedo resolver el problema?

import cv2

img = cv2.imread("index (2).jpg", 0)
can = cv2.Canny(img, 50, 150)
cv2.imshow("res", can)
cv2.imwrite("res.jpg", can)
cv2.waitKey()
cv2.destroyAllWindows()

Imagen original:
Imagen original

Resultado:
Resultado

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Hay algunas cosas que puedes probar para mejorar los resultados del operador Canny en tu imagen con una resolución más alta:

    1. Ajustar los valores de umbral: El operador Canny utiliza dos valores de umbral para determinar qué bordes mantener y cuáles descartar. Intenta ajustar estos valores para ver si mejora el resultado. Puedes hacer esto cambiando el segundo argumento (umbral inferior) y el tercer argumento (umbral superior) de cv2.Canny.
    2. Aplicar desenfoque Gaussiano: Las imágenes de alta resolución tienden a tener más ruido que las imágenes de baja resolución, lo cual puede afectar los resultados del operador Canny. Puedes aplicar un desenfoque Gaussiano a la imagen antes de aplicar el operador Canny para reducir el ruido. Puedes hacer esto utilizando la función cv2.GaussianBlur.

    3. Aumentar el tamaño del kernel: El operador Canny funciona convolucionando la imagen con un filtro (kernel) para detectar bordes. El tamaño del kernel puede afectar los resultados. Intenta aumentar el tamaño del kernel para ver si mejora los resultados. Puedes hacer esto configurando el parámetro apertureSize de cv2.Canny con un valor mayor.

    Aquí tienes un ejemplo de cómo puedes modificar tu código para probar estos enfoques:

    import cv2
    
    img = cv2.imread('index (2).jpg', 0)
    img = cv2.GaussianBlur(img, (3, 3), 0) # aplicar desenfoque Gaussiano
    can = cv2.Canny(img, 80, 240, apertureSize=3) # ajustar valores de umbral y tamaño del kernel
    cv2.imshow('res', can)
    cv2.imwrite('res.jpg', can)
    cv2.waitKey()
    cv2.destroyAllWindows()
    
    

    Experimenta con estas modificaciones y ajusta los parámetros para ver si puedes obtener los resultados deseados.

Comments are closed.