Создание массива изображений 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 бит в конце каждого пикселя.