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.