Siempre creciendo, siempre aprendiendo. Cultura Maker.

Ratio: 0 / 5

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

¡Saludos, estudiantes!. Hace un par de artículos explicábamos cómo podíamos coger una imagen, tratarla de un modo determinado (aplicando un filtro, en nuestro ejemplo de luminosidad), para a continuación tratar el resultado como una máscara que combinábamos con dos imágenes: en una, recortábamos la imagen siguiendo dicha máscara como patrón; en otra, recortábamos siguiendo el inverso de dicha máscara, de modo que ambas imágenes se superpusieran, complementándose de modo perfecto; éste era el resultado de nuestro ejemplo:

 

tutofiltrosFotoAntonio6

 

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado

Bueno, pues llevamos ya unos cuatro artículos dedicados a explorar las posibilidades de Open CV, todos ellos con la perspectiva de acabar programando un robot que responda de modo inteligente a una imagen registrada por una webcam. Sin embargo, aún no hemos acometido una fase muy importante de nuestro aprendizaje, y es el modo en que nuestro ordenador (o nuestra Raspberry, o donde sea que estemos ejecutando nuestro programa en Python) interactuará con Arduino. Para ello, necesitaremos utilizar la librería PySerial:

 

https://pythonhosted.org/pyserial/

 

Como en otras ocasiones, ya te digo que nosotros estamos trabajando en Windows, con Python 2.7, y que la instalación de librerías no entra en el objetivo de estos artículos. Los más avezados ya sabéis que un

python -m pip install pyserial

os sacará del apuro. Si no sabéis cómo hacerlo, también podéis consultar directamente el readme.rst del github donde se aloja todo el software: https://github.com/pyserial/pyserial

 

Y si no, pues como siempre, a bucear y buscar información por la red.

Ratio: 0 / 5

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

¡Saludos, estudiantes!. Continuando con nuestro (somerísimo) repaso de las posibilidades de Open CV en Robótica, hoy quiero hablaros de las transformaciones y de las máscaras. Así, en general. A lo loco. Como si supiéramos de algo.

 

Y es que éste es un mundo muy, muy complejo, que implica el trabajo con  Matemáticas de alto nivel. Y esta humilde web es de un aprendiz para aprendices. Yo os voy explicando lo que voy descubriendo, y qué conclusiones saco, pero eso no quiere decir que tenga necesariamente razón. Así que es mi deber avisarte que todo lo que estás viendo en esta serie de artículos es siempre una aproximación (en muchos casos, hasta grosera) a las poderosas posibilidades que ofrece esta librería.

 

Pero dejémonos de monsergas: hoy quiero hablarte de filtros y máscaras. Para ello, es necesaria una primera explicación: Open CV es una herramienta matemática que trata a las imágenes como matrices de píxeles. Permite que utilice una imagen para ilustrarte:

 

MatBasicImageForComputer

 

Ratio: 0 / 5

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado

Ok, estoy en  medio de la redacción de la serie de artículos intentando dar una visión para aprendices (básica y funcional, sobre todo) de Open CV en Python, y una de las cosas que quiero explicar en ella es la posibilidad de trabajar con librerías haarcascade que pueden detectar e incluso reconocer rasgos faciales. Como eso puede alargarse en el tiempo, y yo ahora mismo tengo que recoger a mis chiquillas del cole, no quiero dejar pasar la oportunidad de mostraros el código que podéis implementar para hacer esta tontuna:

 

 

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado

Bueno, pues si has leído con atención el capítulo anterior, ya estás preparado para comprender algunas particularidades de OpenCV desde la óptica de Python:

 

Conceptos básicos de OpenCV

Si analizamos brevemente el código del artículo anterior, podréis notar que trabajamos en cinco fases:

 

  • En un primer lugar, importamos las librerías necesarias: opencv y numpy (necesaria para opencv, ya que realiza múltiples operaciones matemáticas con las imágenes que se van procesando). Por otro lado, creamos un objeto denominado cap al que asociaremos la webcam que tenemos conectada (0 por defecto; si tuvieras varias, deberías utilizar múltiples números):
    import numpy as np
    import cv2
    cap = cv2.VideoCapture(0)
    

 

  •  A continuación, iniciamos un bucle mediante la instrucción while(True) que sólo se romperá si pulsamos la tecla 'q':
while(True):
#Operacion 1
#Operacion 2
#etc...
    #el procedimiento waitKey comprueba si se ha pulsado la tecla 'q' al final de cada bucle
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Si se ha roto el bucle, procedemos a destruir la ventana y finalizar el programa
cap.release()
cv2.destroyAllWindows()

  • Aquí empieza la auténtica parte de tratamiento de vídeo: por un lado, creamos dos objetos denominados ret y frame que irán registrando las imágenes que componen nuestro vídeo mediante el procedimiento read() en el objeto cap. Por otro, creamos un objeto marco a partir de frame al que asignamos un modo de tratamiento de color (existen decenas, a cada uno le corresponde un flag, y no los controlo todos; en este caso creo que se limita a dejar el modo RGB para la cámara):
    #Dos objetos irán grabando las imágenes del objeto cap
    ret,frame = cap.read()

    # Especificamos el tipo de color (existen decenas) que queremos mostrar de la captura de frame y lo asignamos a un objeto que llamamos marco
    marco = cv2.cvtColor(frame, cv2.COLOR_RGB2RGBA)
  • Por último, sólo nos queda mostrar por una ventana a la que hemos puesto por nombre "Hola Mundo" dicho objeto marco mediante el procedimiento imshow():
    cv2.imshow('Hola Mundo',marco)
    

 

Mientras navegas por esta web, posiblemente interactuemos con tu equipo mediante el uso de cookies. La actual legislación de la UE (European Union) me obliga a informarte de ello, caminante. We use cookies to improve our website and your experience when using it. Cookies used for the essential operation of this site have already been set. To find out more about the cookies we use and how to delete them, see our privacy policy.

  I accept cookies from this site.
EU Cookie Directive Module Information