[SciPy-User] fromimage/imread segfaults on my images

Christopher Barker Chris.Barker at noaa.gov
Mon Mar 8 14:58:08 EST 2010


Daniel Lenski wrote:
> I'm using SciPy to process some sparse binary images with a resolution of 
> about 5000x5000 pixels.  I try to load images like this:
> 
>   im = Image.open('/tmp/foo.pbm')
>   print "Image loaded, size is %s and mode is %s." % (im.size, im.mode)
>   arr = fromimage(im)
> 
> or
> 
>   arr = imread('/tmp/foo.pbm')

where do fromimage and imread come from? "namespaces are one honking 
great idea".

> In either case, I get a segfault.  The segfault is definitely in the 
> SciPy code, rather than the PIL code, since PIL's Image.open runs fine. 

don't be so sure -- I think PIL used lazy loading, so it doesn't 
actually read all the data with the open call, but rather when you try 
to do something with it.

I'd try making a few calls on the PIl image, and make sure it is what 
you expect. If it is, the easiest way to get it into a numpy array is:

np.asarray(pil_image)

do you have a smaller image in the same format you can experiment with? 
That might make it easier to figure out.

>  I don't know any other good, reliable way 
> to get a big image into an array :-(

if you really can't get PIL to work, pbm looks really simple:

http://netpbm.sourceforge.net/doc/pbm.html

read the header, then read the data with np.fromfile(), then convert to 
a uint8 array with np.unpackbits().

You could also take a look at MPL's imread() and see what it does -- I 
don't think MPL requires PIL, though I could be wrong.

-Chris


-- 
Christopher Barker, Ph.D.
Oceanographer

Emergency Response Division
NOAA/NOS/OR&R            (206) 526-6959   voice
7600 Sand Point Way NE   (206) 526-6329   fax
Seattle, WA  98115       (206) 526-6317   main reception

Chris.Barker at noaa.gov



More information about the SciPy-User mailing list