Veamos cómo convertir una imagen en una array NumPy y luego guardar esa array en un archivo CSV en Python. Primero, aprenderemos cómo convertir una imagen en un ndarray numpy. Hay muchos métodos para convertir una imagen a ndarray, algunos de ellos son:
Método 1: usar la biblioteca PIL y NumPy .
Usaremos PIL.Image.open() y numpy.asarray() .
Ejemplo:
Python3
# import required libraries from PIL import Image import numpy as gfg # read an image img = Image.open('geeksforgeeks.jpg') # convert image object into array imageToMatrice = gfg.asarray(img) # printing shape of image print(imageToMatrice.shape)
Producción:
(251, 335, 3)
Método 2: usar la biblioteca Matplotlib .
Usaremos el método matplotlib.image.imread() .
Ejemplo:
Python3
# import library from matplotlib.image import imread # read an image imageToMatrice = imread('geeksforgeeks.jpg') # show shape of the image print(imageToMatrice.shape)
Producción:
(251, 335, 3)
Ahora, la variable imageToMatrice contiene el ndarray que se obtiene después de la conversión de la imagen dada.
La dimensión de la array obtenida se decide por cuántos canales están presentes en la imagen:
- Para una imagen en escala de grises o en blanco y negro: solo hay un canal presente, por lo tanto, la forma de las arrays sería (n, n) donde n representa la dimensión de las imágenes (píxeles), y los valores dentro de la array van desde 0 a 255.
- Para imagen a color o RGB: Renderizará un tensor de 3 canales, por lo que la forma de las arrays sería (n, n,3). Cada canal es una array (n, n) donde cada entrada representa respectivamente el nivel de rojo, verde o azul en la ubicación real dentro de la imagen.
Usaremos dos métodos para hacer lo mismo, el primer método usando la biblioteca numpy y el segundo método usando la biblioteca pandas:
Nota: solo podemos guardar una array 1D o 2D en un archivo, por lo tanto, no habría ningún problema en la imagen en escala de grises o en blanco y negro, ya que es una array 2D, pero debemos asegurarnos de que esto funcione para una imagen en color o en blanco. Imagen RGB, que es una array 3D.
Método 1: usar la biblioteca NumPy .
Usaremos numpy.savetxt() y numpy.loadtxt().
Ejemplo:
Python3
# import required libraries import numpy as gfg import matplotlib.image as img # read an image imageMat = img.imread('gfg.jpg') print("Image shape:", imageMat.shape) # if image is colored (RGB) if(imageMat.shape[2] == 3): # reshape it from 3D matrice to 2D matrice imageMat_reshape = imageMat.reshape(imageMat.shape[0], -1) print("Reshaping to 2D array:", imageMat_reshape.shape) # if image is grayscale else: # remain as it is imageMat_reshape = imageMat # saving matrice to .csv file gfg.savetxt('geek.csv', imageMat_reshape) # retrieving matrice from the .csv file loaded_2D_mat = gfg.loadtxt('geek.csv') # reshaping it to 3D matrice loaded_mat = loaded_2D_mat.reshape(loaded_2D_mat.shape[0], loaded_2D_mat.shape[1] // imageMat.shape[2], imageMat.shape[2]) print("Image shape of loaded Image:", loaded_mat.shape) # check if both matrice have same shape or not if((imageMat == loaded_mat).all()): print("\n\nYes", "The loaded matrice from CSV file is same as original image matrice")
Producción:
Forma de la imagen: (251, 335, 3)
Transformación a array 2D: (251, 1005)
Forma de la imagen de la imagen cargada: (251, 335, 3)
Sí La array cargada del archivo CSV es la misma que la array de la imagen original
Método 2: Usar la biblioteca de Pandas .
Usaremos el método pandas.Dataframe( ) y pandas.Dataframe() .to_csv() .
Python3
# import required libraries import numpy as gfg import matplotlib.image as img import pandas as pd # read an image imageMat = img.imread('gfg.jpg') print("Image shape:", imageMat.shape) # if image is colored (RGB) if(imageMat.shape[2] == 3): # reshape it from 3D matrice to 2D matrice imageMat_reshape = imageMat.reshape(imageMat.shape[0], -1) print("Reshaping to 2D array:", imageMat_reshape.shape) # if image is grayscale else: # remain as it is imageMat_reshape = imageMat # converting it to dataframe. mat_df = pd.DataFrame(imageMat_reshape) # exporting dataframe to CSV file. mat_df.to_csv('gfgfile.csv', header = None, index = None) # retrieving dataframe from CSV file loaded_df = pd.read_csv('gfgfile.csv', sep = ',', header = None) # getting matrice values. loaded_2D_mat = loaded_df.values # reshaping it to 3D matrice loaded_mat = loaded_2D_mat.reshape(loaded_2D_mat.shape[0], loaded_2D_mat.shape[1] // imageMat.shape[2], imageMat.shape[2]) print("Image shape of loaded Image :", loaded_mat.shape) # check if both matrice have same shape or not if((imageMat == loaded_mat).all()): print("\n\nYes", "The loaded matrice from CSV file is same as original image matrice")
Producción:
Forma de la imagen: (251, 335, 3)
Transformación a array 2D: (251, 1005)
Forma de la imagen de la imagen cargada: (251, 335, 3)
Sí La array cargada del archivo CSV es la misma que la array de la imagen original
Publicación traducida automáticamente
Artículo escrito por chetansinha y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA