Numpy Y OpenCV En Acción

Danilo Galindo
Apr 22, 2020

Contents Outline

Numpy Y OpenCV En Acción

Apr 22, 2020 6 minutes read

Numpy es una poderosa librería de fuente libre de python, que es ampliamente utilizada sobre todo para hacer calculos matematicos y estadisticos. Esto es debido a que muchas de sus operaciones son basadas en cálculos vectoriales haciendo uso de arreglos multidimensionales. Además, otras importantes librerías como Pandas y OpenCV hacen uso de Numpy. 

En este post veremos un poco la eficiencia de numpy al momento de seleccionar los datos presentados en filas y columnas. Adicionalmente, hablaremos de OpenCV el cual es muy usado en procesamiento de imágenes,machine learning y visión computacional. También, entenderemos cómo se  relaciona con Numpy. Por último, trabajaremos operaciones básicas con OpenCV y cómo podemos hacer uso de Numpy en el procesamiento de imágenes.

REQUERIMIENTOS        

Para empezar a trabajar con Numpy y OpenCV previamente debemos tener python instalado en el computador. En el link inferior encontrarás la página de descarga para obtener Python. 


Ya instalado Python, podemos seguir con obtener Numpy y OpenCV como sigue en los pasos inferiores.

  • Para obtener Numpy solo basta con usar este comando “pip install numpy” en el command line de tu computador. En el link de abajo, puedes encontrar una breve descripción. https://pypi.org/project/numpy/

  • De igual manera para OpenCV, podemos usar este comando “pip install opencv-python”. También, puedes ver el link de abajo para ver una breve descripción. https://pypi.org/project/opencv-python/

Otra alternativa es tener descargado Anaconda, en el cual todos esos packages (Numpy,OpenCV etc...) han sido previamente instalados. Para descargar Anaconda dirígete al link en la parte inferior. https://www.anaconda.com/distribution/

PRIMEROS PASOS CON NUMPY

El primer paso es importar la librería haciendo uso de la keyword “import”. Como sigue a continuación.

import numpy as np

Ya importado Numpy , podemos crear una lista en la cual encontraremos números entre 0-10 que denota el puntaje de una encuesta para un nuevo producto lanzado en el mercado. La idea es seleccionar los puntajes usando Python y Numpy y ver la diferencia en cuanto a la selección.


-Selección de datos únicos

-Selección de columna 

-Selección de columna pero no completa

Como podemos observar Python hace mucho uso del for loop para su selección. Esto le demanda tiempo y recurso por el hecho de tomar un dato a la vez. Por otro lado, Numpy usa vectores para hacer una selección mas rapida. De igual manera sus operaciones matemáticas se basan en vectorización. 

-Operaciones básicas con Numpy

A continuación descargamos un dataset que presenta el número de muertes por Malaria filtrada por año y continente. De estos datos, veremos cómo extraer la  información para ser analizada. Después, aplicaremos operaciones básicas de Numpy. 

El dataset fue descargado del siguiente link.

-Primero, importamos el csv donde está contenido la información como una lista.

-Transformamos la lista en un array de Numpy.

-Luego, extraemos la muertes de Malaria ocurridas en el año 2000 para los diferentes continentes.

-Podemos comprobar esto haciéndola con Python y luego ver la diferencia.

-Como podemos observar, obtuvimos los mismos valores. Sin embargo, estos valores son strings. Ahora los convertiremos a enteros. 

-Ahora que son enteros, podemos sumar los valores y saber el total de muertes de Malaria ocurridas en el año 2000.
-También, sacar el promedio.
-Valor maximo y minimo. 
 

HABLEMOS UN POCO DE OpenCV          

OpenCV es una poderoso librería para trabajar con computer vision, machine learning and image processing entre muchas otras aplicaciones. Un punto muy interesante de esta librería, es que hace uso de Numpy para manejar toda su estructura de vectores. Esto facilita mucho el uso de ciertas complejas operaciones ya que Numpy maneja muy bien las matematicas, estadisticas y vectores. Otro punto a favor, es la integración con otras librerías basadas en Numpy como Scipy and Matplotlib. 

Para mayor información acerca de OpenCV y su relación con Numpy mira el siguiente link.


A continuación, veremos cómo importar OpenCV y leer una imagen desde esta librería y mostrarla con Matplotlib. En base a OpenCV,Numpy y Matplotlib desarrollaremos cada ítem que se encuentra en la lista inferior.    

-Importar OpenCV y matplotlib.

-leer una imagen con OpenCV en escala de grises y de filtro RGB.
-Verificar el tipo,dimensiones de la imagen (escala de grises y RGB).
Para la imagen de escalas de grises:


En esta sección podemos apreciar que una imagen en escalas de grises es un array de Numpy de 2 dimensiones. El cual es de tipo “Int8” , lo cual significa que está compuesto por valores entre 0-255. Estos dos valores los podemos asemejar con el color Negro para 0 y Blanco para 255 en el rango de colores.  

Por otra parte una imagen con filtros RGB (red,green,blue) es un array de Numpy de 3 dimensiones.

Ahora que sabemos esto, podemos trabajar con las imágenes como lo hacíamos con los arrays de Numpy de dos dimensiones. 

Pero primero, veamos como lucen las imágenes. 

Para la imagen RGB, podemos ver cómo luce cada filtro.
Ahora sí juguemos con las images de 2 dimensiones.

-Podemos mostrar la mitad superior de la imagen de escala de grises.

Luego la mitad inferior.

También con Numpy podemos rotar las imágenes.

Adicionalmente, hay una opción para rotar la imagen 90 grados.

Por último, saquemos el negativo de una imagen con Numpy.

Operaciones aritméticas con imágenes haciendo uso de Numpy y OpenCV

Importemos una nueva imagen y ajustamos su tamaño al mismo de la primera imagen importada con shape de (600,571).

Veamos la adición de imágenes con OpenCV.

Ahora con Numpy.
    

Cuando se usa Numpy los resultados se basan en operaciones de modulo y las imágenes no se ven muy bien. Por el contrario, usando openCV se mucho mejor porque está basada en saturación ya sea a 255 o a 0 dependiendo la operación. Para entender un poco mejor este concepto de modulo y saturación, simplemente es entender que Numpy saca el modulo de la operación sea suma o resta. Sin embargo , OpenCV usa saturación porque siempre trata de aproximar a 255 cuando es suma o 0 cuando es resta.Por tal motivo, las imágenes se ven más limpias.

Para resta con Numpy podemos ver como sigue abajo.

Ahora con OpenCV.

Puedes tomar como referencia el link de abajo para ver las operaciones aritméticas con OpenCv y Numpy.
Join our private community in Discord

Keep up to date by participating in our global community of data scientists and AI enthusiasts. We discuss the latest developments in data science competitions, new techniques for solving complex challenges, AI and machine learning models, and much more!