PIL: problem to convert an image array to PIL format

Peter Otten __peter__ at web.de
Thu Dec 17 09:45:34 EST 2009


Sverre wrote:

> After converting a PIL image in memory to an array with numpy.asarray
> (), I make a adthreshold() with pymorph() with the result, that all
> pixels in the array are either false or true (boolean). But my try to
> convert this back into PIL format is failing
> 
> img = Image.fromarray(rawimg, '1')
> 
> because a true will be interpreted as integer 1 ), so that 7 pixels
> are black and one white. Has someone a solution, so that a  picture
> inly with "true" values doesn't look like this?
> 
> http://img707.imageshack.us/img707/6051/p012.jpg

This has come up before, see

http://mail.python.org/pipermail/python-list/2009-October/1221578.html

Image.fromarray() expects one bit per pixel but actually gets one byte. One 
possible workaround: introduce an intermediate array with a format 
understood by fromarray():

>>> import numpy
>>> from PIL import Image
>>> rawimg = numpy.zeros((20, 20), bool)
>>> rawimg[:10, :10] = rawimg[10:, 10:] = True
>>> b = numpy.array(rawimg, numpy.uint8)
>>> b *= 255
>>> Image.fromarray(b).save("tmp.jpg")

Peter



More information about the Python-list mailing list