2016-10-20 2 views
0

Я пытаюсь настроить существующий код в соответствии с моими потребностями. Первоначально код использовал imgs = np.ndarray((total, 1, image_rows, image_cols), dtype=np.uint8) для хранения списка файлов изображений в формате массива numpy. Итерируя папку, каждый файл изображения читается следующим образом: img = skimage.io.imread(os.path.join(train_data_path, image_name)) Все работает отлично. код выглядит следующим образом:об изменении формы массива numpy в результате ввода изображения

image_rows = 420 
image_cols = 580 
imgs = np.ndarray((total, 1, image_rows, image_cols), dtype=np.uint8) 
i=0 
for image_name in images: 
    img = skimage.io.imread(os.path.join(train_data_path, image_name)) 
    img = np.array([img]) 
    imgs[i]=img 
    i+=1 

Для того, чтобы удовлетворить собственные потребности, я, как правило, имеют множество файлов изображений с формой [total, image_rows,image_cols,1]. Другими словами, я изменил его как imgs = np.ndarray((total,image_rows, image_cols,1), dtype=np.uint8) Однако запуск кода вызывает следующую ошибку

imgs[i] = img 
ValueError: could not broadcast input array from shape (1,420,580) into shape   
(420,580,1) 

Существуют ли какие-либо способ изменить форму img, который первоначально имеет форму [1,420,580] после чтения из файла. Как я могу изменить его на [420,580,1], не затрагивая соответствующие значения пикселей в изображении.

ответ

1

Вы хотите перенести размеры. Это можно сделать с помощью метода транспонирования:

img = img.transpose(1,2,0) 

(для вашего случая)

+0

Спасибо, будет img.reshape работы. Я также попытался изменить форму. Похоже, код может компилироваться. Моя единственная забота об использовании reshape заключается в том, как я могу обеспечить, чтобы пиксели в [1,420,580] могли точно соответствовать пикселям [420,580,1]. – user288609

Смежные вопросы