3.2 SDVA Procesamiento de imágenes


Leer la imagen de entrada y transformarla a escala de grises

Para empezar, vamos a leer la imagen que vamos a utilizar, más adelante probaremos una imagen con más figuras. En esta imagen aparecen: un círculo, un triángulo, un cuadrado, un pentágono, un hexágono y un rectángulo. 

cv2.approxPolyDP

Según OpenCV, la función cv2.approxPolyDP aproxima curvas o una curva poligonal con una precisión especificada. En otro documento nos dice que aproxima una forma de contorno en otra con menos número de vértices, dependiendo de la precisión que le especifiquemos.  

Lo que se me viene a la mente después de esta explicación que nos ofrece OpenCV, es por ejemplo el círculo, al que si aplicáramos esta función se representaría como un polígono con muchísimos lados y vértices. Algo más o menos así:

Haz clic aquí para añadir texto

Bien, pues veamos como se utiliza esta función para emplearla. En este caso se necesita de los siguientes tres argumentos :

Curve: Corresponde al contorno que estemos analizando en ese momento. 

Epsilon: Es el parámetro que especifica la precisión de aproximación. Para obtener este parámetro necesitaremos de la ayuda de la función cv2.arcLength que a su vez calculará el perímetro del contorno o la longitud de curva (dado el caso).

Como argumentos de cv2.arcLength, estarán el contorno que estemos analizando seguido de true o false que corresponde al parámetro closed para indicar que la curva es cerrada o no. Finalmente se tendrá que multiplicar por cierto porcentaje (que hay que tener muy en cuenta) para obtener epsilon. 

Closed: Es true cuando la curva aproximada es cerrada, es decir que tanto el primer como el último vértice están conectados. False, lo contrario. 

Determinando las figuras geométricas

Bien, ahora vamos a usar la información dada por 

approx

. Por ejemplo si en la longitud de esta variable obtenemos 3 estaríamos en presencia de un triángulo, si obtenemos 4 estaríamos en presencia de un cuadrado o rectángulo (algo que debemos diferenciar), si tenemos 5 sería un pentágono y así sucesivamente. En el caso de círculo veremos que se representará como un polígono con muchos vértices.

Cuadrado y Rectángulo

Para determinar cuando se trata de un cuadrado o rectángulo (dado que ambas figuras poseen 4 vértices), vamos a ayudarnos de la información obtenida por    cv2.boundingRect en la línea 17 y emplearemos su aspect ratio.

Aspecto Ratio

El aspecto ratio se obtiene de la relación del ancho y alto del objeto. Veamos la siguiente imagen que nos ayudará con la explicación:

En la figura 4 vemos algunos ejemplos de los resultados obtenidos al aplicar aspecto ratio a un cuadrado y dos rectángulos. Si el cuadrado tiene un ancho y alto de 50 por ejemplo, su aspecto ratio sería 1. Seguido tenemos un rectángulo que tiene ancho de 40 mientras que 100 de alto, su aspecto ratio sería 0.4. El  otro rectángulo posee un ancho de 100 mientras una altura de 40, así que el aspecto ratio resultante sería 2.5.

Entonces ya que el cuadrado tiene sus lados iguales y obtendremos 1 en el aspecto ratio, podemos tomar esto para diferenciarlo del rectángulo, que por otro lado podría obtener valores menores o mayores a 1.

 

A continuacion te dejamos el codigo para que lo practiques tu mismo:

 

 

A continuación te dejamos un video con la finalidad que entiendas de manera mas detallada este tema.

 


Valoración: 5 estrellas
1 voto

Añadir comentario

Comentarios

Todavía no hay comentarios

Crea tu propia página web con Webador