Создание массива изображений Numpy
у меня есть некоторые (950) 150x150x3 .файлы изображений jpg, которые я хочу прочитать в массив Numpy.
Ниже приведен мой код:
X_data = []
files = glob.glob ("*.jpg")
for myFile in files:
image = cv2.imread (myFile)
X_data.append (image)
print('X_data shape:', np.array(X_data).shape)
выход (950, 150)
. Пожалуйста, дайте мне знать, почему список не преобразуется в np.array
правильно и есть ли лучший способ, чтобы создать массив изображений.
из того, что я прочитал, добавление массивов numpy проще сделать через списки python, а затем преобразовать их в массивы.
EDIT: некоторые дополнительная информация (если это поможет), image.shape
возвращает (150,150,3)
правильно.
2 ответов
Я проверил ваш код. Он отлично работает для меня с выходом
('форма X_data:', (4, 617, 1021, 3))
однако все изображения были точно такого же размера.
когда я добавляю другое изображение с разными экстентами, у меня есть этот вывод:
('форма X_data:', (5,))
поэтому я бы рекомендовал проверить размеры и одинаковое количество каналов (как в действительно все изображения цветные изображения)? Также вы следует проверить, имеют ли все изображения (или нет) Альфа-каналы (см. комментарий @Gughan Ravikumar)
если меняется только количество каналов (т. е. некоторые изображения серые), то принудительно загрузите все в цветовой формат с помощью:
image = cv2.imread (myFile, 1)
изменить: Я использовал тот самый код из вопроса, только замененный моим каталогом (и "*.PNG"):
import cv2
import glob
import numpy as np
X_data = []
files = glob.glob ("C:/Users/xxx/Desktop/asdf/*.PNG")
for myFile in files:
print(myFile)
image = cv2.imread (myFile)
X_data.append (image)
print('X_data shape:', np.array(X_data).shape)
ваше определение .Кадр JPG, который будет помещен в матрицу того же размера, должен быть x, y, R, G, B, A. "A" не используется, но он занимает 8 бит в конце каждого пикселя.