Я только что выполнил некоторую обработку изображений с помощью библиотеки изображений Python (PIL), используя сообщение, которое я нашел ранее для выполнения преобразования Фурье изображений, и я не могу заставить работать функцию сохранения. Весь код работает нормально, но не сохраняет получившееся изображение:
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")
Я получаю следующую ошибку:
save_handler = SAVE[string.upper(format)] # unknown format
KeyError: '.BMP'
Как я могу сохранить изображение с помощью Pythons PIL?
источник
fft2
вместо вместо,rfft2
поскольку для дискретных данных я не вижу смысла использовать более позднее. Остальное чисто косметическое, т. Е. Вы не сможете правильно визуализировать преобразование Фурье, не применив к нему логарифмический коэффициент. Тогда нормализация должна упростить преобразование в диапазон [0, 255].visual = (visual - visual.min()) / (visual.max() - visual.min())
будет по умолчанию, еслиvisual
нет дисперсии (маловероятно, но стоит уловить)Вы должны просто позволить PIL получить тип файла из расширения, то есть использовать:
источник
numpy.uint8
dtype, а не в float.Попробуйте удалить
.
перед.bmp
(он не соответствуетBMP
ожидаемому). Как вы можете видеть из ошибки,save_handler
это верхний регистр, которыйformat
вы указали, а затем ищет совпадениеSAVE
. Однако соответствующий ключ в этом объектеBMP
(вместо.BMP
).Я не очень разбираюсь в этом
PIL
, но при быстром поиске кажется, что это проблема сmode
изображением. Изменение определенияj
на:Казалось, у меня работает (однако обратите внимание, что я очень мало знаю
PIL
, поэтому я бы предложил использовать решение @ mmgp, поскольку он / она четко знает, что они делают :)). Для типовmode
я использовал эту страницу - надеюсь, один из вариантов вам подойдет.источник
Я знаю, что это старый, но я обнаружил, что (при использовании Pillow) открытие файла с помощью,
open(fp, 'w')
а затем сохранение файла будет работать. Например:fp
конечно, путь к файлу.источник
format
параметр следует использовать, если используется файловый объектsave
. Разве в этом нет необходимости?