Среда:
- Python 3.7.0
- После создания virtualenv, scikit-образ устанавливается через pip.
scikit-image==0.16.2
, Pillow==7.1.1
- Анаконда на Linux
Исходный код:
from skimage.io import imread
file_path = "image_you_like.png"
img = imread(file_path, plugin="pil", as_gray=False)
Ожидаемый результат:
img
является numpy массив изображений.
Фактический результат:
Не доверяйте номеру строки, потому что я вставил несколько функций печати.
~/Python/experiment/venv/lib/python3.7/site-packages/PIL/PngImagePlugin.py in _seek(self, frame, rewind)
789
790 try:
--> 791 cid, pos, length = self.png.read()
792 except (struct.error, SyntaxError):
793 break
AttributeError: 'NoneType' object has no attribute 'read'
Вопрос
Как я могу предотвратить эту ошибку и прочитать изображение?
После некоторого анализа я обнаружил, что imread
работает, если plugin="matplotlib"
или plugin="imageio"
. Проблема в том, что некоторые функции, такие как skimage.data.camera
, вызывают imread
с plugin="pil"
, и поэтому я не могу попробовать любой пример изображения scikit-image
.
[EDIT]
from skimage.io.manage_plugins import plugin_store
print(plugin_store["imread"])
печатает следующее
[('imageio', <function imread at 0x7efe39112c20>), ('matplotlib', <function imread at 0x7efe37f51290>)]
Таким образом, "pil" не может быть найден в списке.