web-dev-qa-db-fra.com

écrire numdar ndarray dans Image

J'essaie de lire un fichier binaire (tuples RVB 8 bits) en Python, de faire une conversion dessus, puis de l'écrire en tant qu'image png. Je fais ce qui suit:

typeinfo = np.dtype('>i1' ) #read single bytes
data=np.fromfile(("f%05d.txt" %(files[ctr])),dtype=typeinfo)
data=np.reshape(data,[linesperfile,resX,3]) #reshape to size/channels

Si j'affiche les informations de type de data, il dit:

<type 'numpy.ndarray'>
(512L, 7456L, 3L)

Ensuite, je fais quelques manipulations sur l'image (sur place), ensuite je veux écrire l'image dans un fichier. Actuellement j'utilise:

import PIL.Image as im
svimg=im.fromarray(data)
svimg.save(("im%05d"%(fileno)),"png")

mais il continue de me donner l'erreur suivante:

line 2026, in fromarray
raise TypeError("Cannot handle this data type")
TypeError: Cannot handle this data type

Des idees pour faire cela?

24
Cookie

Image a besoin non signé octets, i1 signifie signé octets. Si le signe n'est pas pertinent (toutes les valeurs entre 0 et 127), alors cela fonctionnera:

svimg=im.fromarray(data.astype('uint8'))

Si vous avez besoin de la plage complète 0-255, vous devez utiliser 'uint8' partout.

45
Alex Martelli