Читать несколько изображений из одного каталога с imageio
У меня есть каталог test/
с изображениями 0.jpg
, а также 1.jpg
, Как я могу использовать imageio
"s mimread
функция для указания каталога test
и читать бот 0
а также 1
? Или это не то, для чего он предназначен?
Я старался 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'
3 ответа
Я просмотрел исходный код для imageio и не вижу никакой поддержки в mimread() для перебора файлов в папке для чтения нескольких изображений. Я рекомендую вместо этого использовать scikit-изображение. Вот пример:
from skimage.io import imread_collection
seq = imread_collection("*.jpg", conserve_memory=True)
Затем вы можете индексировать в seq, чтобы получить каждое изображение:
seq[0]
seq[1]
и т.п.
В документации сказано:
uri: {str, pathlib.Path, байты, файл}>
Ресурс для загрузки изображений, например, имя файла, pathlib.Path, адрес http или объект файла, см. Документацию для получения дополнительной информации.
Пытаться imageio.mimread(uri='test')
,
Или это не для этого?
Верный. предназначен для форматов изображений, которые могут хранить более одного изображения в одном файле. Полу-популярным примером такого формата является
.tiff
, который имеет понятие страниц, которые могут содержать разные изображения. Еще один
.psd
(формат фотошопа).
Если вы хотите читать изображения из папки, вы можете сделать это традиционным способом, используя выражение генератора (при условии, что ваша папка содержит только изображения, которые вы хотите прочитать.
(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
сбивает с толку, поэтому, если у вас есть предложения по улучшению ясности, не стесняйтесь оставлять комментарии, и я буду рад обновить документы.