Encuentra y dibuja contornos usando OpenCV | Python

Los contornos se definen como la línea que une todos los puntos a lo largo del límite de una imagen que tienen la misma intensidad. Los contornos son útiles en el análisis de formas, en encontrar el tamaño del objeto de interés y en la detección de objetos.

OpenCV tiene findContour()una función que ayuda a extraer los contornos de la imagen. Funciona mejor en imágenes binarias, por lo que primero debemos aplicar técnicas de umbralización, bordes de Sobel, etc.

A continuación se muestra el código para encontrar contornos:

import cv2
import numpy as np
  
# Let's load a simple image with 3 black squares
image = cv2.imread('C://Users//gfg//shapes.jpg')
cv2.waitKey(0)
  
# Grayscale
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  
# Find Canny edges
edged = cv2.Canny(gray, 30, 200)
cv2.waitKey(0)
  
# Finding Contours
# Use a copy of the image e.g. edged.copy()
# since findContours alters the image
contours, hierarchy = cv2.findContours(edged, 
    cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
  
cv2.imshow('Canny Edges After Contouring', edged)
cv2.waitKey(0)
  
print("Number of Contours found = " + str(len(contours)))
  
# Draw all contours
# -1 signifies drawing all contours
cv2.drawContours(image, contours, -1, (0, 255, 0), 3)
  
cv2.imshow('Contours', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Salida:

Vemos que hay tres argumentos esenciales en cv2.findContours()función. El primero es la imagen de origen, el segundo es el modo de recuperación de contornos, el tercero es el método de aproximación de contornos y genera la imagen, los contornos y la jerarquía. ‘ contornos ‘ es una lista de Python de todos los contornos de la imagen. Cada contorno individual es una array Numpy de coordenadas (x, y) de puntos límite del objeto.

Método de aproximación de contornos:
arriba, vemos que los contornos son los límites de una forma con la misma intensidad. Almacena las coordenadas (x, y) del límite de una forma. ¿Pero almacena todas las coordenadas? Eso se especifica mediante este método de aproximación de contorno.
Si pasamos cv2.CHAIN_APPROX_NONE, todos los puntos límite se almacenan. Pero en realidad, ¿necesitamos todos los puntos? Por ejemplo, si tenemos que encontrar el contorno de una línea recta. Solo necesitamos dos extremos de esa línea. Esto es lo que cv2.CHAIN_APPROX_SIMPLEhace. Elimina todos los puntos redundantes y comprime el contorno, ahorrando así memoria.

Publicación traducida automáticamente

Artículo escrito por Sourabh_Sinha y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *