Las imágenes son una forma más fácil de representar el modelo de trabajo. En Machine Learning, Python usa los datos de la imagen en el formato de Altura, Ancho, Canal. es decir, las imágenes se convierten en Numpy Array en formato de altura, ancho y canal.
Módulos necesarios:
- NumPy: de forma predeterminada en versiones superiores de Python como 3.x en adelante, NumPy está disponible y, si no está disponible (en versiones inferiores), se puede instalar usando
pip install numpy
- Pillow: Esto también debe instalarse explícitamente en versiones posteriores. Es una herramienta preferida de manipulación de imágenes. En Python 3, la biblioteca de Python de Pillow que no es más que la actualización de PIL únicamente. Se puede instalar usando
pip install Pillow
Uno puede verificar fácilmente la versión de Pillow instalada usando el siguiente código
Python3
import PIL print('Installed Pillow Version:', PIL.__version__)
Producción:
Installed Pillow Version: 7.2.0
Cargando las imágenes a través de la biblioteca de Pillows
Busquemos una imagen que esté en formato PNG o JPEG. La imagen puede ser referida a través de su ruta. La clase de imagen es el corazón de PIL. Tiene la función open() que abre una imagen y se puede recuperar el formato de archivo digital, así como el formato de píxel.
Imagen utilizada:
Python3
from PIL import Image # sample.png is the name of the image # file and assuming that it is uploaded # in the current directory or we need # to give the path image = Image.open('Sample.png') # summarize some details about the image print(image.format) print(image.size) print(image.mode)
Producción :
PNG (400, 200) RGB
Convertir una imagen en NumPy Array
Python proporciona muchos módulos y API para convertir una imagen en una array NumPy. Vamos a discutir algunos de ellos en detalle.
Usando el módulo NumPy
El módulo Numpy en sí mismo proporciona varios métodos para hacer lo mismo. Estos métodos son –
Método 1: Usar la función asarray()
La función asarray() se usa para convertir imágenes PIL en arrays NumPy. Esta función convierte la
Python3
# Import the necessary libraries from PIL import Image from numpy import asarray # load the image and convert into # numpy array img = Image.open('Sample.png') # asarray() class is used to convert # PIL images into NumPy arrays numpydata = asarray(img) # <class 'numpy.ndarray'> print(type(numpydata)) # shape print(numpydata.shape)
Producción :
<class 'numpy.ndarray'> (200, 400, 3)
Método 2: Usar la función numpy.array()
Mediante el uso de la función numpy.array() que toma una imagen como argumento y la convierte en una array NumPy
Python3
from PIL import Image import numpy img= Image.open("Sample.png") np_img = numpy.array(img) print(np_img.shape)
Producción :
(200, 400, 3)
Para obtener el valor de cada píxel de la imagen de la array NumPy, necesitamos imprimir los datos recuperados que se obtuvieron de la función asarray() o de la función array().
Python3
# Import the necessary libraries from PIL import Image from numpy import asarray # load the image and convert into # numpy array img = Image.open('Sample.png') numpydata = asarray(img) # data print(numpydata)
Producción :
[[[111 60 0] [116 65 0] [122 69 0] ... [ 97 47 0] [ 99 47 0] [100 49 0]] [[111 61 0] [118 65 0] [122 69 0] ... [ 97 47 0] [ 99 48 0] [100 49 0]] [[118 65 0] [122 69 0] [126 73 3] ... [ 98 48 0] [100 49 0] [100 49 0]] ... [[ 96 44 7] [ 95 43 6] [ 93 41 4] ... [225 80 3] [228 80 0] [229 78 0]] [[ 93 40 6] [ 90 37 5] [ 85 32 0] ... [226 81 4] [231 80 1] [232 79 1]] [[ 89 36 4] [ 84 31 0] [ 79 26 0] ... [228 81 4] [232 81 4] [233 80 2]]]
Recuperar la imagen de Numpy Array convertido
La función Image.fromarray() ayuda a recuperar la imagen de la array numpy convertida. Recuperamos los píxeles también después de convertir de un lado a otro. Por lo tanto, esto es muy eficiente.
Python3
# Import the necessary libraries from PIL import Image from numpy import asarray # load the image and convert into # numpy array img = Image.open('Sample.png') numpydata = asarray(img) print(type(numpydata)) # shape print(numpydata.shape) # Below is the way of creating Pillow # image from our numpyarray pilImage = Image.fromarray(numpydata) print(type(pilImage)) # Let us check image details print(pilImage.mode) print(pilImage.size)
Producción :
<class 'numpy.ndarray'> (200, 400, 3) <class 'PIL.Image.Image'> RGB (400, 200)
Conversión de imágenes usando la API de Keras
Keras API proporciona las funciones para cargar, convertir y guardar datos de imagen. Es posible ejecutar Keras en la parte superior del marco TensorFlow y, por lo tanto, es obligatorio tenerlo. Las imágenes de visión artificial de aprendizaje profundo requieren la API de Keras. Para instalarlo, escriba el siguiente comando en la terminal
pip install keras
Como Keras requiere TensorFlow 2.2 o superior. Si no está allí, necesita instalarlo. Para instalarlo, escriba el siguiente comando en la terminal.
pip install tensorflow
Python3
from keras.preprocessing.image import load_img import warnings # load the image via load_img # function img = load_img('sample.png') # details about the image printed below print(type(img)) print(img.format) print(img.mode) print(img.size)
Producción :
<class 'PIL.PngImagePlugin.PngImageFile'> PNG RGB (400, 200)
Con la API de Keras, convierta imágenes a Numpy Array y revierta la imagen de Numpy Array
Python3
from keras.preprocessing.image import load_img import warnings from keras.preprocessing.image import img_to_array from keras.preprocessing.image import array_to_img # load the image via load_img function img = load_img('sample.png') # details about the image printed below print(type(img)) print(img.format) print(img.mode) print(img.size) # convert the given image into numpy array img_numpy_array = img_to_array(img) print("Image is converted and NumPy array information :") # <class 'numpy.ndarray'> print(type(img_numpy_array)) # type: float32 print("type:", img_numpy_array.dtype) # shape: (200, 400, 3) print("shape:", img_numpy_array.shape) # convert back to image img_pil_from_numpy_array = array_to_img(img_numpy_array) # <class 'PIL.PngImagePlugin.PngImageFile'> print("converting NumPy array into image:", type(img_pil_from_numpy_array))
Producción :
<class 'PIL.PngImagePlugin.PngImageFile'> PNG RGB (400, 200) Image is converted and NumPy array information : <class 'numpy.ndarray'> type: float32 shape: (200, 400, 3) converting NumPy array into image: <class 'PIL.Image.Image'>
A partir del resultado anterior, podemos comprobar que los tipos de imagen de origen PIL.Image.Image y de destino son los mismos.
Uso de la biblioteca OpenCV
La versión OpenCV de 3.x tiene marcos DNN y Caffe, y son muy útiles para resolver problemas de aprendizaje profundo. Se puede instalar usando
pip install opencv-contrib-python
El paquete cv2 tiene los siguientes métodos
- La función imread() se usa para cargar la imagen y también lee la imagen dada (imagen PIL) en el formato de array NumPy.
- Luego necesitamos convertir el color de la imagen de BGR a RGB.
- imwrite() se utiliza para guardar la imagen en el archivo.
Python3
import cv2 image = cv2.imread('Sample.png') # BGR -> RGB img = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) cv2.imwrite('opncv_sample.png', img) print (type(img))
Producción :
<class 'numpy.ndarray'>
Conclusión
Python es una herramienta muy flexible y hemos visto formas de convertir imágenes en Numpy Array y de manera similar volver a imágenes usando diferentes API. Manipulando la array convertida y formando diferentes datos de imagen, uno puede alimentar redes neuronales de aprendizaje profundo.
Publicación traducida automáticamente
Artículo escrito por priyarajtt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA