I'm using scikit-image to read an image:
img = skimage.io.imread(filename)
After doing some manipulations to img
, I'd like to save it to an in-memory file (a la StringIO
) to pass off to another function, but it looks like skimage.io.imsave
requires a filename, not a file handle.
I'd like to avoid hitting the disk (imsave
followed by read from another imaging library) if at all possible. Is there a nice way to get imsave
(or some other scikit-image-friendly function) to work with StringIO
?
Update: 2020-05-07
We now recommend using the imageio
library for image reading and writing. Also, with Python 3, StringIO changes to BytesIO:
from io import BytesIO
import imageio
buf = BytesIO()
imageio.imwrite(buf, image, format='png')
scikit-image
stores images as numpy arrays, therefore you can use a package such as matplotlib
to do so:
import matplotlib.pyplot as plt
from StringIO import StringIO
s = StringIO()
plt.imsave(s, img)
This may be worth adding as default behaviour to skimage.io.imsave
, so if you want you can also file an issue at https://github.com/scikit-image/scikit-image.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With