program tip

PIL로 이미지를 저장하려면 어떻게해야합니까?

radiobox 2020. 8. 22. 08:29
반응형

PIL로 이미지를 저장하려면 어떻게해야합니까?


방금 이미지의 푸리에 변환을 수행하기 위해 이전에 찾은 게시물을 사용하여 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로 저장하기 위해 float 데이터를 허용하지 않는다고 말합니다.

다음은 적절한 시각화를위한 변환을 수행하기위한 제안 ( fftshiftnumpy.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")

( 예상대로 일치하지 않음) .전에 제거하십시오 . 오류에서 알 수 있듯이 는 제공 한 대문자로 된 다음 . 그러나 해당 객체의 해당 키는 (대신 )입니다..bmpBMPsave_handlerformatSAVEBMP.BMP

에 대해 잘 모르지만 PIL몇 가지 빠른 검색 mode을 통해 이미지 의 문제인 것 같습니다 . 정의 j를 다음으로 변경 :

j = Image.fromarray(b, mode='RGB')

나를 위해 일하는 PIL것처럼 보였습니다 (그러나 나는에 대한 지식이 거의 없으므로 @mmgp의 솔루션을 사용하는 것이 좋습니다 / 그는 그들이 무엇을하고 있는지 명확하게 알고 있습니다 :)). 의 유형에 대해이 페이지를 mode사용했습니다. 페이지의 선택 사항 중 하나가 도움이되기를 바랍니다.


이것이 오래되었다는 것을 알고 있지만 Pillow를 사용하는 동안 파일을 사용 open(fp, 'w')하고 저장하여 파일을 열면 작동한다는 것을 알았 습니다. 예 :

with open(fp, 'w') as f:
    result.save(f)

fp 물론 파일 경로입니다.

참고 URL : https://stackoverflow.com/questions/14452824/how-can-i-save-an-image-with-pil

반응형