scikit-image сохранить изображение в строку байтов

Я использую scikit-image для чтения изображения:

img = skimage.io.imread(filename)

После некоторых манипуляций с img я хотел бы сохранить его в файл в памяти (а-ля StringIO) для передачи другой функции, но это выглядит как skimage.io.imsave требует имени файла, а не дескриптора файла.

Я хотел бы избежать удара по диску (imsave с последующим чтением из другой библиотеки изображений), если это вообще возможно. Есть ли хороший способ заставить imsave (или какую-либо другую функцию scikit-image) работать с StringIO?


person Jason Sundram    schedule 23.04.2013    source источник


Ответы (1)


Обновление: 07.05.2020

Теперь мы рекомендуем использовать библиотеку imageio для чтения и записи изображений. Кроме того, в Python 3 StringIO меняется на BytesIO:

from io import BytesIO
import imageio

buf = BytesIO()
imageio.imwrite(buf, image, format='png')

scikit-image хранит изображения в виде массивов numpy, поэтому для этого вы можете использовать такой пакет, как matplotlib:

import matplotlib.pyplot as plt
from StringIO import StringIO

s = StringIO()

plt.imsave(s, img)

Возможно, это стоит добавить в качестве поведения по умолчанию для skimage.io.imsave, поэтому, если вы хотите, вы также можете сообщить о проблеме по адресу https://github.com/scikit-image/scikit-image.

person Stefan van der Walt    schedule 23.04.2013
comment
Спасибо, Стефан! Я создал проблему здесь: github.com/scikit-image/scikit-image/ вопросы/533 - person Jason Sundram; 24.04.2013
comment
Это все еще положение дел по состоянию на 2020 год? - person Adam Hughes; 06.05.2020