Re: [Matplotlib-users] imshow, imsave to PIL image conversion
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 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 > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > -- 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. -- ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] imshow, imsave to PIL image conversion
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 wrote: >> >> >> >> Angus McMorland-2 wrote: >>> >>> On 31 May 2010 23:17, Angus McMorland wrote: >>> >>>> On 31 May 2010 19:49, rugspin 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 >>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users >>> >>> >> >> 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 >> https://lists.sourceforge.net/lists/listinfo/matplotlib-users >> > > -- > > ___ > Matplotlib-users mailing list > Matplotlib-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > -- 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. -- ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] imshow, imsave to PIL image conversion
Angus McMorland-2 wrote: > > On 31 May 2010 23:17, Angus McMorland wrote: > >> On 31 May 2010 19:49, rugspin 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 > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > 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 https://lists.sourceforge.net/lists/listinfo/matplotlib-users
[Matplotlib-users] imshow, imsave to PIL image conversion
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. -- ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users