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로 저장하기 위해 부동 데이터를 허용하지 않는다고 말합니다.
여기 제안이 있습니다(사용과 같은 기타 사소한 수정 사항 포함).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
물론 파일 경로입니다.
다음은 제가 PIL로 annmp 이미지를 가져온 다음 내보내는 작업입니다.
def read_img(path):
"""
Read image and store it as an array, given the image path.
Returns the 3 dimensional image array.
"""
img = Image.open(path)
img_arr = np.array(img, dtype='int32')
img.close()
return img_arr
def write_image(arr, filename):
"""
write the image
input : 3 dimensional array
"""
path = "output/" + filename + ".bmp"
arr = arr.astype(dtype='uint8')
img = Image.fromarray(arr, 'RGB')
img.save(path)
언급URL : https://stackoverflow.com/questions/14452824/how-can-i-save-an-image-with-pil
'programing' 카테고리의 다른 글
Spring Cloud - Zuul Proxy가 'Access-Control-Allow-Origin' Ajax 응답을 생성하지 않습니다. (0) | 2023.07.20 |
---|---|
포맷 후 NUMBER 열에 ####이 표시되는 이유는 무엇입니까? (0) | 2023.07.20 |
파이썬에서 포인트가 폴리곤 내부에 있는지 확인하는 가장 빠른 방법은 무엇입니까? (0) | 2023.07.20 |
리눅스에서 bash 명령이 아닌 C 함수에 대한 man 페이지를 가져오려면 어떻게 해야 합니까? (0) | 2023.06.10 |
Excel: VLOOKUP에 일치하는 항목이 없을 때 셀을 (0 대신) 비워 두는 방법은 무엇입니까? (0) | 2023.06.10 |