이미지의 푸리에 변환을 수행하기 위해 이전에 찾은 게시물을 사용하여 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로 이미지를 어떻게 저장할 수 있습니까?
답변
파일 확장자에 관한 오류가 처리되었습니다. 사용하거나 BMP
(점없이) 이미 확장자가있는 출력 이름을 전달하십시오. 이제 오류를 처리하려면 정수 이미지로 저장할 주파수 영역의 데이터를 적절하게 수정해야합니다.이 오류 PIL
는 BMP로 저장하기 위해 부동 데이터를 허용하지 않는다고 말합니다.
다음은 적절한 시각화를위한 변환을 수행하기위한 제안 ( fftshift
및 numpy.array
대신 및 사용 과 같은 기타 사소한 수정 포함 numpy.asarray
)입니다.
import sys
import numpy
from PIL import Image
img = Image.open(sys.argv[1]).convert('L')
im = numpy.array(img)
fft_mag = numpy.abs(numpy.fft.fftshift(numpy.fft.fft2(im)))
visual = numpy.log(fft_mag)
visual = (visual - visual.min()) / (visual.max() - visual.min())
result = Image.fromarray((visual * 255).astype(numpy.uint8))
result.save('out.bmp')
답변
PIL이 확장자에서 파일 유형을 얻도록 할 수 있어야합니다.
j.save("C:/Users/User/Desktop/mesh_trans.bmp")
답변
( 예상대로 일치하지 않음) .
전에 제거하십시오 . 오류에서 알 수 있듯이 는 제공 한 대문자를 사용한 다음 . 그러나 해당 객체의 해당 키는 (대신 )입니다..bmp
BMP
save_handler
format
SAVE
BMP
.BMP
에 대해 잘 모르겠지만 PIL
몇 가지 빠른 검색 mode
을 통해 이미지 의 문제인 것 같습니다 . 정의 j
를 다음으로 변경 :
j = Image.fromarray(b, mode='RGB')
나를 위해 일하는 PIL
것처럼 보였습니다 (그러나 나는에 대한 지식이 거의 없으므로 @mmgp의 솔루션을 사용하는 것이 좋습니다. 의 유형에 대해이 페이지를 mode
사용했습니다. 이 페이지에서 선택 사항 중 하나가 효과가 있기를 바랍니다.
답변
나는 이것이 오래되었다는 것을 알고 있지만 필로우를 사용하는 동안 파일을 사용하여 파일을 연 open(fp, 'w')
다음 저장하면 작동 한다는 것을 알았 습니다. 예 :
with open(fp, 'w') as f:
result.save(f)
fp
물론 파일 경로입니다.