OpenCV Canny en Python

Manav Narula 21 junio 2023
  1. Usa la función cv2.canny() en Python
  2. Conclusión
OpenCV Canny en Python

Usamos la librería opencv para trabajar con imágenes y gráficos para visión artificial en Inteligencia Artificial, Machine Learning, y más técnicas. Podemos usar las funcionalidades de esta biblioteca para leer y procesar imágenes de manera eficiente.

Este tutorial demostrará la función cv2.canny() en Python.

Usa la función cv2.canny() en Python

La función cv2.canny() implementa el algoritmo Canny Edge Detection desarrollado por John F. Canny. Podemos usar esta función para detectar bordes de una imagen dada.

El algoritmo en sí mismo tiene múltiples etapas.

  1. La primera etapa implica la reducción de ruido, y para ello, el algoritmo utiliza un filtro gaussiano de 5x5.

  2. La siguiente etapa implica encontrar el gradiente de intensidad para la imagen dada. En esta etapa, la imagen se suaviza y luego se pasa al kernel de Sobel, donde se filtra a lo largo de los ejes x e y, y se encuentra su gradiente para cada eje.

  3. En la tercera etapa, cada píxel se comprueba con los máximos locales en la dirección del degradado para eliminar los píxeles no deseados que no forman un borde.

  4. La etapa final es aquella donde se clasifican los filos. Se toman dos valores umbral, minVal y maxVal.

    Los bordes con valores de gradiente superiores a maxVal son los bordes, y los que están por debajo de minVal no lo son. El resto de estos valores de umbral se clasifican en función de su conectividad.

Todas las etapas anteriores son implementadas por la función cv2.canny(). Es necesario conocer estas etapas al determinar los parámetros para esta función.

En el siguiente ejemplo, detectaremos los bordes de una imagen.

import cv2

img = cv2.imread("deftstack.png")
e = cv2.Canny(img, threshold1=50, threshold2=100)

cv2.imshow("Edges Detected", e)
cv2.waitKey(0)
cv2.destroyAllWindows()

detectando bordes usando la función canny de opencv

En el ejemplo anterior, leemos la imagen usando la función cv2.imread(). Los bordes se detectan para esta imagen utilizando la función cv2.canny().

Observe los dos parámetros en la función umbral1 y umbral2. Estos dos parámetros son el valor de la frecuencia umbral minVal y maxVal comentada anteriormente.

Es obligatorio proporcionar estos dos valores.

Después de clasificar los bordes de la imagen dada, la mostramos en una nueva ventana usando la función cv2.imshow(). La función cv2.waitkey(0) se utiliza en el ejemplo para evitar que el intérprete cierre automáticamente la ventana creada y espere a que el usuario pulse alguna tecla.

La función cv2.destroyAllWindows() cierra todas las ventanas.

La función cv2.canny() también acepta dos parámetros opcionales adicionales llamados apertureSize y L2gradient. El parámetro apertureSize especifica el tamaño de la apertura para el núcleo Sobel.

Por defecto, su valor es tres y puede tomar cualquier valor impar entre tres y cinco. Podemos aumentar el tamaño de apertura para obtener más características de la imagen.

El Gradiente L2 toma un valor True o False, por defecto es False.

Si especificamos el parámetro L2gradient como True, entonces se utiliza el nuevo algoritmo L2Gradient para calcular el valor del gradiente; de lo contrario, se utiliza la ecuación tradicional. El nuevo algoritmo tiende a ser un poco más preciso.

Conclusión

Discutimos cómo usar la función cv2.canny() en este tutorial. Discutimos el algoritmo de detección Canny Edge y cómo esta función lo implementa internamente.

La función se demostró con un ejemplo. También discutimos los parámetros de esta función.

Algunas eran obligatorias, threshold1 y threshold2, mientras que otras eran opcionales, apertureSize y L2gradient.

Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Artículo relacionado - Python OpenCV