programing

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

randomtip 2023. 7. 20. 23:13
반응형

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

반응형