Sauvegarder les données d'une image dans un fichier texte avec python, numpy et PIL

Dans cet article on va voir comment transformer une image en fichier texte avec python. L'objectif ici étant, tout d'abord, d'obtenir une matrice de données à partir d'une image et de sauvegarder cette matrice dans un simple fichier texte (fichier qui pourra servir ultérieurement par un programme en fortran ou en C pour travailler directement sur les données brutes de l'image). Considérons un exemple simple: une image en niveau de gris (lena_grayscale.png); pour obtenir une matrice de données à partir de l'image il faut passer par "imread"; cette fonction retourne ici une matrice de dimension (512, 512, 4) avec 512*512 nombres de pixels dans l'image et 4: (3 pour le code RGB + 1 pour le canal alpha qui règle la transparence de cette dernière); l'image étant en niveau de gris le code RGB est donc le même pour les 3 couleurs (R=G=B); si de plus on ne prend pas en compte le canal alpha on peut résumer l'image à une matrice de dimension (512,512) et sauvegarder avec numpy (voir numpy.savetxt) les données dans un fichier intitulé ici [attachment:465]:

Transformer une image en fichier texte avec python.
Transformer une image en fichier texte avec python.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('lena_grayscale.png')

print type(img)
print img.shape, img.dtype
print img.max(),img.min()

M = np.zeros((img.shape[0],img.shape[1]))   
M[:,:] = img[:,:,0]

np.savetxt('data.txt',M)

plt.imshow(M, cmap = plt.get_cmap('gray')) # Check if Data are ok !
plt.show()

Note: pour vérifier que la matrice M de dimension (512,512) est suffisante pour obtenir l'image de départ vous pouvez utiliser la fonction imshow de matplotlib pour tracer celle-ci.

Recherches associées

Image

of