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
Imagen binaria
Flecha contorneada