write numpy ndarray to Image
Asked Answered
W

1

30

I'm trying to read a binary file (8 bit RGB tuples) in Python, do some conversion on it and then write it as a png image. I'm doing the following:

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

If I display the type information of data it says:

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

Then I do some manipulation on the image (in-place), afterwards I want to write the Image to a file. Currently I use:

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

but it keeps giving me the following error:

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

Any ideas how to do this?

Winebaum answered 23/12, 2014 at 14:58 Comment(1)
Have you seen #4712380? It seems that it can't handle RGB in that way.Laciniate
B
57

Image needs unsigned bytes, i1 means signed bytes. If the sign is irrelevant (all values between 0 and 127), then this will work:

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

If you need the full range 0-255, you should use 'uint8' throughout.

Bantu answered 23/12, 2014 at 15:28 Comment(1)
This is really helpful!Slipshod

© 2022 - 2024 — McMap. All rights reserved.