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]:
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
Liens | Site |
---|---|
How to write a multidimensional array to a text file? | stackoverflow |
numpy.savetxt | numpy doc |
numpy.save | numpy Doc |