Python | Detectar polígonos en una imagen usando OpenCV

Enfoque: el enfoque que usaríamos para detectar la forma de un polígono dado se basará en clasificar la forma detectada en función de la cantidad de lados que tiene. Por ejemplo, si el polinomio detectado tiene 3 lados, podría considerarse un triángulo, si el polinomio tiene 4 lados, podría clasificarse como un cuadrado o un rectángulo.

Requisito previo :

  • Asegúrese de tener Python3, OpenCV, numpy ya instalado en su computadora.
  • El conocimiento básico sobre OpenCV sería útil: conceptos básicos de OpenCV
  • Asegúrese de guardar la imagen en la que se detectarán las formas en su directorio local

Implementación: en el siguiente código, detectaremos un objeto en forma de flecha de la imagen ‘flecha.jpg’. La forma se detectará en función del número de lados que tenga.

Código: programa Python para detectar polígonos en una imagen

# Python code to detect an arrow (seven-sided shape) from an image.
import numpy as np
import cv2
   
# Reading image
img2 = cv2.imread('arrow.jpg', cv2.IMREAD_COLOR)
   
# Reading same image in another variable and 
# converting to gray scale.
img = cv2.imread('arrow.jpg', cv2.IMREAD_GRAYSCALE)
   
# Converting image to a binary image 
# (black and white only image).
_,threshold = cv2.threshold(img, 110, 255, 
                            cv2.THRESH_BINARY)
   
# Detecting shapes in image by selecting region 
# with same colors or intensity.
contours,_=cv2.findContours(threshold, cv2.RETR_TREE,
                            cv2.CHAIN_APPROX_SIMPLE)
   
# Searching through every region selected to 
# find the required polygon.
for cnt in contours :
    area = cv2.contourArea(cnt)
   
    # Shortlisting the regions based on there area.
    if area > 400: 
        approx = cv2.approxPolyDP(cnt, 
                                  0.009 * cv2.arcLength(cnt, True), True)
   
        # Checking if the no. of sides of the selected region is 7.
        if(len(approx) == 7): 
            cv2.drawContours(img2, [approx], 0, (0, 0, 255), 5)
   
# Showing the image along with outlined arrow.
cv2.imshow('image2', img2) 
   
# Exiting the window if 'q' is pressed on the keyboard.
if cv2.waitKey(0) & 0xFF == ord('q'): 
    cv2.destroyAllWindows()

Nota: El parámetro ‘110’ en el umbral podría ajustarse según sea necesario si el objeto es de un color diferente y se basa en prueba y error.

Resultado :

Imagen con flecha

Arrow

Imagen binaria

Binary Image

Flecha contorneada

Outlined Arrow

Publicación traducida automáticamente

Artículo escrito por vyom_garg 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 *