Google+ Seguidores

miércoles, 19 de septiembre de 2018

Manipulación y procesamiento de imágenes con Python y Scipy

Introducción:

Hola amigos de Internet, les doy la bienvenida a Mi Diario Python, el mejor log para Aprender Python.

En este articulo, veremos como manipular y procesar imágenes utilizando la librería scipy. Veremos cuales son los métodos que nos permitirán manipular nuestras imágenes con una serie de ejemplos.

Sera muy fácil y sencillo, ya veras.


Manipulación de imágenes con scipy:

Lo primero que necesitamos, es disponer de scipy. Podemos instalar esta librería a través de PiPy ejecutando el siguiente comando en nuestra terminal:

pip install scipy

Muy bien, una vez que dispongamos de scipy, podremos utilizar todos sus métodos.

Abriendo imágenes:

Lo más sencillo que podemos hacer, y se puede decir que es lo más importante, es abrir la imagen.

Como sabemos, las computadoras no pueden "ver" las imágenes para procesarlas. Todo funciona mediante números. Por lo que siempre que abrimos una imagen lo que sucede es que pasa por una serie de procedimientos lo cual convierte a la misma en un tipo de dato que la computadora pueda comprender.

 ¿Con que quiero llegar a todo esto? Al abrir una imagen, lo que scipy hará sera procesarla, y convertirla en un array numpy. Veamos como se hace:

# Convertir una imagen a un array

# Importamos a misc
from scipy import misc

# Leemos la imagen
img = misc.imread('dog.jpg')

# Tipo de dato de la variable "img"
type(img)

numpy.ndarray

Muy bien, de esta manera, pasamos una imagen, a una serie de datos.

Pero ahora que converitmos una imagen a una serie de numeros, quien dice que no podemos hacer lo contrario.

Para ello utilizaremos un método llamada face el cual nos proporciona el mismo scipy. Face es una serie de datos que utilizaremos como ejemplo para convertirlo en una imagen:

# Convertir un array a una imagen
from scipy import misc

img_s = misc.face()
misc.imsave("image_s.png", img_s)

Lo que hacemos es guardar los datos, que face nos devuelve, es una variable. Luego utlizamos el método imsave, al cual recibe como argumento dos valores. El nombre del archivo y el array numpy de la imagen.

¿Y la imagen? La imagen se guardara en el directorio en que estés ejecutando estos códigos. El resultado es el siguiente:


Un perro muy bonito... Jajaja no, es obvio que no es un perro (es una iguana). 

Mostrando la imagen:

Ya que tenemos los datos de la imagen (array) podemos utilizar librerías que representen estos datos.
Que mejor que matplotlib.

#Importamos matplotlib
import matplotlib.pyplot as plt

# Imagen en escala de grises
gray = misc.face(gray=True)

# Mostramos la imagen
plt.imshow(gray,cmap=plt.cm.gray)
plt.show()


Manipulación:

Ahora que tenemos la imagen en un formato que la computadora puede entender, es moemento de manipular estos datos.

# Importamos numpy
import numpy as np

face = misc.face(gray=True)

lx, ly = face.shape
X, Y = np.ogrid[0:lx, 0:ly]
mask = (X - lx / 2) ** 2 + (Y - ly / 2) ** 2 > lx * ly / 4

face[mask] = 0

# Cambiamos los bits de la imagen
# Para hacer el efecto del circulo
face[range(400), range(400)] = 255

# Mostramos la iamgen modificada
plt.imshow(face)
plt.show()