(imageio или celery) Ошибка закрытия: у объекта 'Image' нет атрибута 'fp'

Я использую imageio для записи изображений PNG в файл.

import numpy as np
import matplotlib.cm as cm
import imageio # for saving the image
import matplotlib as mpl

hm_colors = ['blue', 'white','red']
cmap = mpl.colors.LinearSegmentedColormap.from_list('bwr', hm_colors)
data = np.array([[1,2,3],[5,6,7]])
norm = mpl.colors.Normalize(vmin=-3, vmax=3)
colormap = cm.ScalarMappable(norm=norm, cmap=cmap)
im = colormap.to_rgba(data)
# scale the data to a width of w pixels
im = np.repeat(im, w, axis=1)
im = np.repeat(im, h, axis=0)
# save the picture
imageio.imwrite("my_img.png", im)

Этот процесс выполняется автоматически, и я заметил несколько сообщений об ошибках:

Error closing: 'Image' object has no attribute 'fp'.

Перед этим сообщением я получаю предупреждение:

/usr/local/lib/python2.7/dist-packages/imageio/core/util.py:78: UserWarning: Lossy conversion from float64 to uint8, range [0, 1] dtype_str, out_type.__name__))

Однако изображения, похоже, создаются и сохраняются просто отлично. Я не могу найти данные для воссоздания этого сообщения.

Есть идеи, почему я получаю эту ошибку и почему она не влияет на результаты? Я не использую PIL. Одной из возможных причин может быть использование этого в сельдерее.

Спасибо! L.

1 ответ

Я столкнулся с той же проблемой, используя imageio.imwrite в Python 3.5. Это довольно безопасно, за исключением того факта, что он останавливает сборку мусора и приводит к чрезмерному использованию памяти при записи тысяч изображений. Решение состояло в том, чтобы использовать PIL модуль, который является зависимостью imageio, Последняя строка вашего кода должна выглядеть так:

from PIL import Image
image = Image.fromarray(im)
image.save('my_img.png')
Другие вопросы по тегам