Właśnie wykonałem trochę przetwarzania obrazu przy użyciu biblioteki obrazów Python (PIL), korzystając z postu, który znalazłem wcześniej, aby wykonać transformacje Fouriera obrazów i nie mogę uruchomić funkcji zapisywania. Cały kod działa dobrze, ale po prostu nie zapisze wynikowego obrazu:
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")
Otrzymuję następujący błąd:
save_handler = SAVE[string.upper(format)] # unknown format
KeyError: '.BMP'
Jak mogę zapisać obraz za pomocą Pythons PIL?
źródło
fft2
zamiast,rfft2
ponieważ w przypadku danych dyskretnych nie widzę sensu używania późniejszego. Reszta jest czysto kosmetyczna, tj. Nie byłbyś w stanie poprawnie zwizualizować transformaty Fouriera bez zastosowania do niej współczynnika logarytmicznego. Następnie normalizacja polega na uproszczeniu konwersji do zakresu [0, 255].visual = (visual - visual.min()) / (visual.max() - visual.min())
domyślnie, jeślivisual
nie ma wariancji (mało prawdopodobne, ale warte złapania)Powinieneś móc po prostu pozwolić PILowi pobrać typ pliku z rozszerzenia, tj. Użyj:
źródło
numpy.uint8
dtype zamiast na float.Spróbuj usunąć
.
przed.bmp
(nie pasujeBMP
zgodnie z oczekiwaniami). Jak widać z błędu,save_handler
jest to duże literyformat
podane przez Ciebie, a następnie szuka dopasowania wSAVE
. Jednak odpowiadający mu klucz w tym obiekcie toBMP
(zamiast.BMP
).Nie wiem zbyt wiele
PIL
, ale po szybkich poszukiwaniach wydaje się, że jest to problem zmode
obrazem. Zmiana definicjij
na:Wydawało mi się, że działa dla mnie (jednak zauważ, że mam bardzo małą wiedzę
PIL
, więc sugerowałbym użycie rozwiązania @ mmgp, ponieważ on / on wyraźnie wie, co robią :)). Jeśli chodzi o typymode
, użyłem tej strony - mam nadzieję, że jeden z dostępnych wyborów będzie dla Ciebie odpowiedni.źródło
Wiem, że to jest stare, ale odkryłem, że (podczas korzystania z Pillow) otwarcie pliku za pomocą,
open(fp, 'w')
a następnie zapisanie pliku będzie działać. Na przykład:fp
jest to oczywiście ścieżka do pliku.źródło
format
parametr powinien być używany, jeśli obiekt pliku jest używany wsave
. Czy to nie jest konieczne?