3 de enero de 2011

Dibujar Rectángulos

El objetivo de el siguiente ejemplo es comenzar a trabajar con los eventos del mouse. Vamos a dibujar rectangulos en una ventana, algo que suena bastante sencillo y ciertamente lo es, aunque me costo mucho trabajo poder pasar este ejemplo a python y hacerlo funcionar.

Mientras pasaba este codigo me di cuenta que en C habia un tipo de dato llamado CvRect, el cual no existia en python. CvRect tienes la siguiente estructura: CvRect (x,y,width, height) . CvRect permite describir en esencia un rectangulo, donde x,y son las coordenadas del punto superior derecho del rectangulo y width y height son el ancho y el alto del rectangulo respectivamente.

Cualquiera que conozca un poco de python se dara cuenta que el tipo CvRect no es mas que una tupla, tal ves por eso no se incluye en los bindings de OpenCV para python.

Aun asi en el ejemplo, yo realizo esto por medio de una lista. En este momento quiero mostrar los dos codigos, el de C que esta expuesto en el libro y el de python que yo realice.

Codigo C:














































Fin :) ...

Codigo Python:

























Resultado: (en los dos es el mismo, en el codigo de python solo cambie que la ventana donde dibujo fuera mas grande, y que los rectangulos sean rojos)


Este ejemplo es sustancialmente mas complicado que los que habia hecho hasta el momento, incluso cuando el programa esta explicado en los comentarios.

Si miran los codigos en C cuando se refieren a los rectangulos lo hacen por medio de una variable llamada box que es de tipo CvRect sin embargo como en python no existe este tipo la defini como una lista de 4 elementos llamada box. Asi, si me quiero referir al primer elemento de box que es la coordenada x la llamo como box[0], si quiero usar box.height en python la uso como box[3]. Pude haberme ahorrado esto haciendo una clase llamada box con atributos x,y,width,height; De esa manera hubiera pudido referirme de la misma forma a la variable box. pero no le ve incoveniente, aunque para futuros trabajos mas complejos seria necesario para facilitar el trabajo, ya que es mas facil refererirse como box.x que decir box[0].

No hay comentarios:

Publicar un comentario