Сохранение 3-мерной размерности при преобразовании изображения PIL в массив numpy - PullRequest
0 голосов
/ 21 октября 2019

У меня есть список изображений PIL: p0, p1, ..., p85999 (всего 86000 из них). Все они RGB, размером 30x30px.

Мне нужно преобразовать их в нормализованные массивы, я сделал следующее:

[np.asarray(r).astype('float32') / 255.0) for r in images]

, где r - этоPIL-изображение.

Это дает массив пустых массивов.

Однако эти массивы иногда имеют форму (30,30,3), а иногда - (30,30).

Iхочу, чтобы они всегда имели форму (30,30,3).

Я предполагаю, что numpy делает это по соображениям производительности (когда RGB не нужен, например, белые изображения?).

В любом случае, как получить желаемый результат - получить все массивы numpy размером (30,30,3)?

Кроме того, в идеале, я бы хотел, чтобы мой конечный массив numpy был размером (30, 30, 3, 86000). Есть ли ярлык для создания такого массива прямо из изображений PIL?

1 Ответ

0 голосов
/ 21 октября 2019

Я предполагаю, что numpy делает это по соображениям производительности

Numpy не имеет к этому никакого отношения, это ваше изображение PIL, имеющее только один канал. Самое простое решение - просто convert все в RGB:

ims = [np.asarray(r.convert('RGB')).astype('float32') / 255.0) for r in images]

Если вы затем вызовете np.asarray(ims), вы получите массив формы [N,30,30,3], где N - количество изображений, котороезатем вы можете transpose по вашему желанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...