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

Active 20 août 2014    /    Viewed 2772    /    Comments 0    /    Edit


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.

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


Card image cap
profile-image
Daidalos

Hi, I am Ben.

I have developed this web site from scratch with Django to share with everyone my notes. If you have any ideas or suggestions to improve the site, let me know ! (you can contact me using the form in the welcome page). Thanks!