scikit-image 无法导入图像
scikit-image can not import an image
环境:
- Python 3.7.0
- 创建 virtualenv 后,scikit-image 是通过 pip 安装的。
scikit-image==0.16.2
、Pillow==7.1.1
- Anaconda 在 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
等函数用 plugin="pil"
调用 imread
,因此我无法尝试 scikit-image
.
的任何示例图像
[编辑]
from skimage.io.manage_plugins import plugin_store
print(plugin_store["imread"])
打印以下内容
[('imageio', <function imread at 0x7efe39112c20>), ('matplotlib', <function imread at 0x7efe37f51290>)]
因此"pil"无法在列表中找到。
这个问题是 reported on github。
作为用户,最简单的解决方案是将版本降级到 6.2.2。
环境:
- Python 3.7.0
- 创建 virtualenv 后,scikit-image 是通过 pip 安装的。
scikit-image==0.16.2
、Pillow==7.1.1
- Anaconda 在 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
等函数用 plugin="pil"
调用 imread
,因此我无法尝试 scikit-image
.
[编辑]
from skimage.io.manage_plugins import plugin_store
print(plugin_store["imread"])
打印以下内容
[('imageio', <function imread at 0x7efe39112c20>), ('matplotlib', <function imread at 0x7efe37f51290>)]
因此"pil"无法在列表中找到。
这个问题是 reported on github。
作为用户,最简单的解决方案是将版本降级到 6.2.2。