web-dev-qa-db-fra.com

PIL ne peut pas écrire le mode F en jpeg

Je prends une image jpg et utilise fft2 de numpy pour créer/enregistrer une nouvelle image. Cependant, il jette cette erreur

"IOError: cannot write mode F as JPEG" 

Y a-t-il un problème avec les fichiers CMJN et JPEG dans PIL ???

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

Essayez de convertir l'image en RVB:

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

La réponse de Semente est bonne pour les images en couleur Pour les images en niveaux de gris, vous pouvez utiliser ci-dessous: -

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

Si vous utilisez new_p = new_p.convert('RGB') pour une image en niveaux de gris, l'image aura toujours une profondeur de 24 bits au lieu de 8 bits et occupera trois fois la taille du disque dur et ce ne sera pas une véritable image en niveaux de gris.

13
Himanshu Punetha