Создать numpy массив, состоящий из нескольких изображений - PullRequest
0 голосов
/ 25 января 2020

У меня есть несколько изображений (они одного размера), которые я хочу поместить в массив numpy, чтобы в результате получился массив измерения (len(img_list), 1).

img_list = [img, img, img]
img.shape, type(img_list), len(img_list)

((1056, 2034, 3), list, 3)

Моя главная проблема заключается в том, что при использовании numpy.array() происходит следующее:

a = np.array(img_list, dtype=np.object)
type(a), a.dtype, a.shape, a.ndim

(numpy .ndarray, dtype ('O'), (3, 1056, 2034, 3), 4)

Обратите внимание на размеры четыре, вместо двух, как и ожидалось.

Пока что лучший метод, который я нашел, чтобы получить измерение (len(img_list), 1), - создать пустой массив нужного измерения и затем использовать широковещательную рассылку:

a = np.empty((3,1), dtype=np.object)
type(a), a.dtype, a.shape, a

(numpy .ndarray, dtype ('O'), (3, 1), массив ([[None], [None], [None]], dtype = object))

a[:,0] = img_list
type(a), a.dtype, a.shape

(numpy .ndarray, dtype ('O'), (3, 1))

Это дает желаемый размер.

Существует ли функция numpy, которая может сделать это напрямую, не создавая сначала пустой массив?


РЕДАКТИРОВАТЬ

Я думал, что использование numpy.hstack или numpy.stack должно помочь. но это приводит к «неправильному» измерению:

a_stacked = np.stack(img_list)
type(a_stacked), a_stacked.dtype, a_stacked.shape, a.ndim

(numpy .ndarray, dtype ('uint8'), (3, 1056, 2034, 3), 4)

* 1 046 *

Чтобы уточнить: я бы хотел a.ndim == 2, а не a.ndim == 4. Другими словами, a.shape должно быть (3,1), а не (3, 1056, 2034, 3).

1 Ответ

1 голос
/ 25 января 2020

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

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