web-dev-qa-db-ja.com

PILはモードFをjpegに書き込めません

私はjpg画像を取り、numpyのfft2を使用して新しい画像を作成/保存しています。ただし、このエラーがスローされます

"IOError: cannot write mode F as JPEG" 

PILのCMYKおよびJPEGファイルに問題がありますか?

p = Image.open('kibera.jpg')
bw_p = p.convert('L')
array_p = numpy.asarray(bw_p)
fft_p = abs(numpy.fft.rfft2(array_p))
new_p = Image.fromarray(fft_p)
new_p.save('kibera0.jpg')
new_p.histogram()
29
JHHP

画像をRGBに変換してみてください:

...
new_p = Image.fromarray(fft_p)
if new_p.mode != 'RGB':
    new_p = new_p.convert('RGB')
...
41
semente

Sementeの答えは、カラー画像に適しています。グレースケール画像の場合、以下を使用できます。

_new_p = Image.fromarray(fft_p)
new_p = new_p.convert("L")
_

グレースケール画像にnew_p = new_p.convert('RGB')を使用すると、画像は8ビットではなく24ビットの深さであり、ハードディスクのサイズの3倍を占めるため、真のグレースケール画像にはなりません。

13