PIL: problem to convert an image array to PIL format

S

Sverre

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
 
P

Peter Otten

Sverre said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,226
Members
46,815
Latest member
treekmostly22

Latest Threads

Top