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.
-
La primera etapa implica la reducción de ruido, y para ello, el algoritmo utiliza un filtro gaussiano de 5x5.
-
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.
-
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.
-
La etapa final es aquella donde se clasifican los filos. Se toman dos valores umbral,
minVal
ymaxVal
.Los bordes con valores de gradiente superiores a
maxVal
son los bordes, y los que están por debajo deminVal
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()
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 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