Je viens de faire un traitement d'image en utilisant la bibliothèque d'images Python (PIL) en utilisant un article que j'ai trouvé plus tôt pour effectuer des transformations de Fourier des images et je ne parviens pas à faire fonctionner la fonction de sauvegarde. L'ensemble du code fonctionne bien mais il ne sauvera pas l'image résultante:
from PIL import Image
import numpy as np
i = Image.open("C:/Users/User/Desktop/mesh.bmp")
i = i.convert("L")
a = np.asarray(i)
b = np.abs(np.fft.rfft2(a))
j = Image.fromarray(b)
j.save("C:/Users/User/Desktop/mesh_trans",".bmp")
L'erreur que j'obtiens est la suivante:
save_handler = SAVE[string.upper(format)] # unknown format
KeyError: '.BMP'
Comment puis-je enregistrer une image avec Pythons PIL?
la source
fft2
au lieu derfft2
puisque pour les données discrètes, je ne vois pas l'intérêt d'utiliser le plus tard. Le reste est purement cosmétique, c'est-à-dire que vous ne pourriez pas visualiser correctement la transformée de Fourier sans lui appliquer un facteur log. Ensuite, la normalisation consiste à simplifier les choses pour la conversion vers la plage [0, 255].visual = (visual - visual.min()) / (visual.max() - visual.min())
sera par défaut sivisual
n'a pas de variance (peu probable, mais vaut la peine d'être attrapé)Vous devriez pouvoir simplement laisser PIL obtenir le type de fichier de l'extension, c'est-à-dire utiliser:
la source
numpy.uint8
dtype plutôt qu'en float.Essayez de supprimer le
.
avant le.bmp
(il ne correspond pasBMP
comme prévu). Comme vous pouvez le voir à partir de l'erreur, lasave_handler
casse supérieure est celle queformat
vous avez fournie, puis recherche une correspondance dansSAVE
. Cependant, la clé correspondante dans cet objet estBMP
(au lieu de.BMP
).Je ne sais pas grand-chose
PIL
, mais après quelques recherches rapides, il semble que ce soit un problème avecmode
l'image. Modification de la définition dej
en:Cela a semblé fonctionner pour moi (notez cependant que je n'ai que très peu de connaissances
PIL
, donc je suggérerais d'utiliser la solution de @ mmgp car il sait clairement ce qu'ils font :)). Pour les types demode
, j'ai utilisé cette page - j'espère que l'un des choix fonctionnera pour vous.la source
Je sais que c'est vieux, mais j'ai trouvé que (en utilisant Pillow) ouvrir le fichier en utilisant
open(fp, 'w')
puis en enregistrant le fichier fonctionnera. Par exemple:fp
étant le chemin du fichier, bien sûr.la source
format
paramètre doit être utilisé si un objet fichier est utilisé danssave
. N'est-ce pas nécessaire?