[Numpy-discussion] Images and numpy

Robert Kern robert.kern at gmail.com
Sun Oct 19 00:23:13 EDT 2008


On Sat, Oct 18, 2008 at 23:07, Lane Brooks <lbrooks at mit.edu> wrote:
> What are the preferred ways to get images, like jpgs and pngs, from disk
> into a numpy array and from a numpy array to disk?
>
> I did some google searches and found a PEP thread where Travis was
> proposing an extended buffer protocol that would make for easier
> interoperability with libraries such as PIL.  Did that materialize?

Yes. There are two protocols, a Python level one, and a C level one.
Python 2.6 is the first release where the C one is standard. Recent
PILs support the Python level one.


In [9]: import Image

In [10]: img = Image.open('icon.png')

In [11]: import numpy

In [12]: numpy.asarray(img)
Out[12]:
array([[[  0,   0,   0,   0],
        [  0,   0,   0,   0],
        [  0,   0,   0,   0],
        ...,
        [  0,   0,   0,   0],
        [  0,   0,   0,   0],
        [  0,   0,   0,   0]],
...

In [14]: img2 = Image.fromarray(Out[12])

In [15]: img2
Out[15]: <Image.Image instance at 0x1c0baa8>

In [16]: img2.size
Out[16]: (48, 48)


You may also want to look at scipy's scipy.misc.pilutil module. It
doesn't use these newer APIs, but it does have extra functionality
like scaling float arrays to [0..255] to write out to PNGs and such.

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
  -- Umberto Eco



More information about the NumPy-Discussion mailing list