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()
Este es un ejemplo sencillo, como podemos ver, lo que hacemos es sustituir algunos pixeles de la imagen.
Para terminar, hagamos algunas transformaciones geométricas:
from scipy import ndimage # Rotación de la imagen img = misc.face(gray=True) rotate_img_90 = ndimage.rotate(img, 90) rotate_img_45 = ndimage.rotate(img, 45) plt.imshow(rotate_img_90) plt.show()
Con el método rotate de ndimage podemos rotar una imagen como nosotros queramos.
En el ejemplo anterior la rotación es de 90°.
Veamos uno de 45°:
from scipy import ndimage # Rotación de la imagen img = misc.face(gray=True) rotate_img_90 = ndimage.rotate(img, 90) rotate_img_45 = ndimage.rotate(img, 45) plt.imshow(rotate_img_45) plt.show()
Muy bien, excelente.
¿Que opinas? Muy fácil ¿No crees?
¿Alguna duda? No dudes en dejar tu comentario.
Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes :D.
Referencias: http://www.scipy-lectures.org/advanced/image_processing/.
-
Hola Tengo una duda razonable, he estado utilizando el metodo face, y he cogido una foto de un camino de un monte y me ha modificado la foto y dentro está la iguana. la miniatura cuando está cerrado el fichero sige siendo la misma foto del camino. ¿Por que?
Deja una respuesta
Gracias por compartir vuestro conocimiento con nosotros. Es una filosofia muy buena para poder avanzar juntos, y aprender todos.
Lo dicho muchas gracias.