1

我有一个test/包含图像的目录0.jpg,并且1.jpg. 如何使用imageio'smimread函数指定目录test并同时读取01?或者这不是它的本意?

我试过imageio.mimread(uri="/path/to/test/", format=".jpg")但得到以下结果:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-43-89a6d166a345> in <module>()
----> 1 imageio.mimread(uri="test", format=".jpg", memtest=True)

/Users/myuser/anaconda/envs/python3/lib/python3.5/site-packages/imageio/core/functions.py in mimread(uri, format, memtest, **kwargs)
    279 
    280     # Get reader
--> 281     reader = read(uri, format, 'I', **kwargs)
    282 
    283     # Read

/Users/myuser/anaconda/envs/python3/lib/python3.5/site-packages/imageio/core/functions.py in get_reader(uri, format, mode, **kwargs)
    127 
    128     # Return its reader object
--> 129     return format.get_reader(request)
    130 
    131 

/Users/myuser/anaconda/envs/python3/lib/python3.5/site-packages/imageio/core/format.py in get_reader(self, request)
    165         if select_mode not in self.modes:
    166             raise RuntimeError('Format %s cannot read in mode %r' % 
--> 167                                (self.name, select_mode))
    168         return self.Reader(self, request)
    169 

RuntimeError: Format JPEG-PIL cannot read in mode 'I'
4

3 回答 3

1

我查看了 imageio 的源代码,但在 mimread() 中没有看到任何支持遍历文件夹中的文件以读取多个图像。我建议改用 scikit-image。这是一个例子:

from skimage.io import imread_collection
seq = imread_collection("*.jpg", conserve_memory=True)

然后您可以索引到 seq 以获取每个图像:

seq[0]

seq[1]

等等

于 2018-05-16T16:47:13.017 回答
0

文档说:

uri:{str,pathlib.Path,字节,文件}>

从中加载图像的资源,例如文件名、pathlib.Path、http 地址或文件对象,请参阅文档以获取更多信息。

试试imageio.mimread(uri='test')

于 2018-04-21T18:16:46.143 回答
0

或者这不是它的本意?

正确的。mimread适用于能够在同一文件中存储多个图像的图像格式。这种格式的一个半流行示例是.tiff,它具有页面的概念,其中可能包含不同的图像。另一种是.psd(photoshop 格式)。

如果要从文件夹中读取图像,可以使用生成器表达式以传统方式进行(假设您的文件夹仅包含您要读取的图像

(iio.imread(filename) for filename in glob.glob(folder))

或者您可以更复杂,并根据您的需要编写递归读取和/或过滤文件的内容。

def read_folder(folder, ...):
    for item in glob.glob(folder):
        if matches_image_filter(item):
            yield iio.imread(item)
        elif matches_subfolder_filter(item):
            yield from read_folder(item, ...)

你明白了;)


注意:这不是我第一次听到这mimread令人困惑,所以如果您对如何提高清晰度有任何建议,请随时发表评论,我很乐意更新文档。

于 2021-06-04T11:19:30.967 回答