I have a small problem how to convert an image from matplotlib to PIL

right now doing somthing like this:

## ···

------------------------------------------

from scipy import *

from pylab import *

from PIL import Image

a = arange(16384).reshape(128,128)

imsave( "test.png", a, cmap=cm.summer,vmin=0,vmax=16383)

b = Image.open("test.png" )

------------------------------------------

so I have a 128x128 array, get a 128x128 size png by making use of a

colormap and get a 128x128 size PIL image. But so far I could figure out a

way to do this directly without writing a temporary png and reading it

again, which is quite slow. My important point here is to keep the the pixel

resolution.

I would be glad about some help

Regards Hans

--

View this message in context: http://old.nabble.com/imshow%2C-imsave-to-PIL-image-conversion-tp28736246p28736246.html

Sent from the matplotlib - users mailing list archive at Nabble.com.

The Image.fromarray function should do what you want. For example,

import numpy as np # note: use of “from foo import *”

import Image # is discouraged where possible

a = np.arange(128)[None,:] * np.ones(128)[:,None]

b = Image.fromarray(a)

c = np.asarray(b)

np.all(c == a)

→ True

I hope that helps,

Angus.

## ···

On 31 May 2010 19:49, rugspin <piet_parnie@…273…> wrote:

I have a small problem how to convert an image from matplotlib to PIL

right now doing somthing like this:

from scipy import *

from pylab import *

from PIL import Image

a = arange(16384).reshape(128,128)

imsave( “test.png”, a, cmap=cm.summer,vmin=0,vmax=16383)

b = Image.open(“test.png” )

–

AJC McMorland

Post-doctoral research fellow

Neurobiology, University of Pittsburgh

I have a small problem how to convert an image from matplotlib to PIL

right now doing somthing like this:

from scipy import *

from pylab import *

from PIL import Image

a = arange(16384).reshape(128,128)

imsave( “test.png”, a, cmap=cm.summer,vmin=0,vmax=16383)

b = Image.open(“test.png” )

The Image.fromarray function should do what you want. For example,

import numpy as np # note: use of “from foo import *”

import Image # is discouraged where possible

a = np.arange(128)[None,:] * np.ones(128)[:,None]

Sorry - I was playing around with a few iterations of this line, and didn’t provide the most useful one. Your example:

a = np.arange(128**2).reshape(128,128)

should also work fine.

## ···

On 31 May 2010 23:17, Angus McMorland <amcmorl@…287…> wrote:

On 31 May 2010 19:49, rugspin <piet_parnie@…273…> wrote:

b = Image.fromarray(a)

c = np.asarray(b)

np.all(c == a)

→ True

I hope that helps,

Angus.

–

AJC McMorland

Post-doctoral research fellow

Neurobiology, University of Pittsburgh

Angus McMorland-2 wrote:

I have a small problem how to convert an image from matplotlib to PIL

right now doing somthing like this:

------------------------------------------

from scipy import *

from pylab import *

from PIL import Image

a = arange(16384).reshape(128,128)

imsave( "test.png", a, cmap=cm.summer,vmin=0,vmax=16383)

b = Image.open("test.png" )

------------------------------------------

The Image.fromarray function should do what you want. For example,

import numpy as np # note: use of "from foo import *"

import Image # is discouraged where possible

a = np.arange(128)[None,:] * np.ones(128)[:,None]

Sorry - I was playing around with a few iterations of this line, and

didn't

provide the most useful one. Your example:

a = np.arange(128**2).reshape(128,128)

should also work fine.

b = Image.fromarray(a)

c = np.asarray(b)

np.all(c == a)

-> True

I hope that helps,

Angus.

--

AJC McMorland

Post-doctoral research fellow

Neurobiology, University of Pittsburgh

------------------------------------------------------------------------------

_______________________________________________

Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

matplotlib-users List Signup and Options

Thank you Angus

but that's not exactly what i was looking for. The fromarray function is

very basic, so I would have to take care of all the RGBA of the array. the

imshow and imsave functions take care of all that for example adding a

colormap. After choosing a reasonable colormap (vmin, vmax, ....) I would

like to convert this into a PIL image.

Best Regard

Hans

## ···

On 31 May 2010 23:17, Angus McMorland <amcmorl@...287...> wrote:

On 31 May 2010 19:49, rugspin <piet_parnie@...273...> wrote:

--

View this message in context: http://old.nabble.com/imshow%2C-imsave-to-PIL-image-conversion-tp28736246p28739401.html

Sent from the matplotlib - users mailing list archive at Nabble.com.

You may use StringIO.

from scipy import *

from pylab import *

from PIL import Image

import cStringIO

a = arange(16384).reshape(128,128)

f = cStringIO.StringIO()

imsave(f, a, cmap=cm.summer,vmin=0,vmax=16383, format="png") # you'd

better set the format explicitly.

f.reset()

b = Image.open(f)

f.close()

IHTH,

-JJ

## ···

On Tue, Jun 1, 2010 at 5:18 AM, rugspin <piet_parnie@...273...> wrote:

Angus McMorland-2 wrote:

On 31 May 2010 23:17, Angus McMorland <amcmorl@...287...> wrote:

On 31 May 2010 19:49, rugspin <piet_parnie@...273...> wrote:

I have a small problem how to convert an image from matplotlib to PIL

right now doing somthing like this:

------------------------------------------

from scipy import *

from pylab import *

from PIL import Image

a = arange(16384).reshape(128,128)

imsave( "test.png", a, cmap=cm.summer,vmin=0,vmax=16383)

b = Image.open("test.png" )

------------------------------------------

The Image.fromarray function should do what you want. For example,

import numpy as np # note: use of "from foo import *"

import Image # is discouraged where possible

a = np.arange(128)[None,:] * np.ones(128)[:,None]

Sorry - I was playing around with a few iterations of this line, and

didn't

provide the most useful one. Your example:

a = np.arange(128**2).reshape(128,128)

should also work fine.

b = Image.fromarray(a)

c = np.asarray(b)

np.all(c == a)

-> True

I hope that helps,

Angus.

--

AJC McMorland

Post-doctoral research fellow

Neurobiology, University of Pittsburgh

------------------------------------------------------------------------------

_______________________________________________

Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

matplotlib-users List Signup and Options

Thank you Angus

but that's not exactly what i was looking for. The fromarray function is

very basic, so I would have to take care of all the RGBA of the array. the

imshow and imsave functions take care of all that for example adding a

colormap. After choosing a reasonable colormap (vmin, vmax, ....) I would

like to convert this into a PIL image.

Best Regard

Hans

--

View this message in context: http://old.nabble.com/imshow%2C-imsave-to-PIL-image-conversion-tp28736246p28739401.html

Sent from the matplotlib - users mailing list archive at Nabble.com.

------------------------------------------------------------------------------

_______________________________________________

Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

matplotlib-users List Signup and Options

Thanks Jae-Joo

That's doing it, thought there might be an internal way within matplotlib,

but I could figure one.

I'm quite confused with the canvas, dpi, ...

Regards Hans

Jae-Joon Lee wrote:

## ···

You may use StringIO.

from scipy import *

from pylab import *

from PIL import Image

import cStringIO

a = arange(16384).reshape(128,128)

f = cStringIO.StringIO()

imsave(f, a, cmap=cm.summer,vmin=0,vmax=16383, format="png") # you'd

better set the format explicitly.

f.reset()

b = Image.open(f)

f.close()

IHTH,

-JJ

On Tue, Jun 1, 2010 at 5:18 AM, rugspin <piet_parnie@...273...> wrote:

Angus McMorland-2 wrote:

On 31 May 2010 23:17, Angus McMorland <amcmorl@...287...> wrote:

On 31 May 2010 19:49, rugspin <piet_parnie@...273...> wrote:

I have a small problem how to convert an image from matplotlib to PIL

right now doing somthing like this:

------------------------------------------

from scipy import *

from pylab import *

from PIL import Image

a = arange(16384).reshape(128,128)

imsave( "test.png", a, cmap=cm.summer,vmin=0,vmax=16383)

b = Image.open("test.png" )

------------------------------------------

The Image.fromarray function should do what you want. For example,

import numpy as np # note: use of "from foo import *"

import Image # is discouraged where possible

a = np.arange(128)[None,:] * np.ones(128)[:,None]

Sorry - I was playing around with a few iterations of this line, and

didn't

provide the most useful one. Your example:

a = np.arange(128**2).reshape(128,128)

should also work fine.

b = Image.fromarray(a)

c = np.asarray(b)

np.all(c == a)

-> True

I hope that helps,

Angus.

--

AJC McMorland

Post-doctoral research fellow

Neurobiology, University of Pittsburgh

------------------------------------------------------------------------------

_______________________________________________

Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

matplotlib-users List Signup and Options

Thank you Angus

but that's not exactly what i was looking for. The fromarray function is

very basic, so I would have to take care of all the RGBA of the array.

the

imshow and imsave functions take care of all that for example adding a

colormap. After choosing a reasonable colormap (vmin, vmax, ....) I would

like to convert this into a PIL image.

Best Regard

Hans

--

View this message in context:

http://old.nabble.com/imshow%2C-imsave-to-PIL-image-conversion-tp28736246p28739401.html

Sent from the matplotlib - users mailing list archive at Nabble.com.

------------------------------------------------------------------------------

_______________________________________________

Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

matplotlib-users List Signup and Options

------------------------------------------------------------------------------

_______________________________________________

Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

matplotlib-users List Signup and Options

--

View this message in context: http://old.nabble.com/imshow%2C-imsave-to-PIL-image-conversion-tp28736246p28745632.html

Sent from the matplotlib - users mailing list archive at Nabble.com.

That's doing it, thought there might be an internal way within matplotlib,

but I could figure one.

I think you can use the agg backend and the corresponding Canvas'es method

canvas.tostring_rgb()

. Then you can load this in PIL by Image.fromstring.

Well, I simply send you my PIL backend. Tell me if it's still working ...

Friedrich

canvas.py (2.02 KB)

If you need more hard-core way of doing this,

a = np.arange(16384).reshape(128, 128)

from matplotlib.colors import Normalize

import matplotlib.cm as cm

norm = Normalize(vmin=0, vmax=16383)

cmap = cm.summer

A = (cmap(norm(a))*255).astype(np.uint8)

import Image

pilim = Image.fromarray(A, "RGBA")

## ···

On Tue, Jun 1, 2010 at 2:22 PM, rugspin <piet_parnie@...273...> wrote:

That's doing it, thought there might be an internal way within matplotlib,

but I could figure one.

Thanks Jae-Joon and Friedrich

I will try out both solutions.

Regards Hans

Jae-Joon Lee wrote:

## ···

On Tue, Jun 1, 2010 at 2:22 PM, rugspin <piet_parnie@...273...> wrote:

That's doing it, thought there might be an internal way within

matplotlib,

but I could figure one.

If you need more hard-core way of doing this,

a = np.arange(16384).reshape(128, 128)

from matplotlib.colors import Normalize

import matplotlib.cm as cm

norm = Normalize(vmin=0, vmax=16383)

cmap = cm.summer

A = (cmap(norm(a))*255).astype(np.uint8)

import Image

pilim = Image.fromarray(A, "RGBA")

------------------------------------------------------------------------------

_______________________________________________

Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

matplotlib-users List Signup and Options

--

View this message in context: http://old.nabble.com/imshow%2C-imsave-to-PIL-image-conversion-tp28736246p28753655.html

Sent from the matplotlib - users mailing list archive at Nabble.com.