Я использую PIL для загрузки изображений, а затем преобразую их в массивы NumPy. Затем мне нужно создать новое изображение на основе списка изображений, поэтому я добавляю все массивы в список, а затем преобразую список обратно в массив, чтобы форма для списка изображений имела 4 измерения (n_images, height,ширина, rgb_channels). Я использую этот код:
def gallery(array, ncols=4):
nindex, height, width, intensity = array.shape
nrows = nindex // ncols
# want result.shape = (height*nrows, width*ncols, intensity)
result = (array.reshape(nrows, ncols, height, width, intensity)
.swapaxes(1,2)
.reshape(height*nrows, width*ncols, intensity))
return result
def make_array(dim_x):
for i in range(dim_x):
print('series',i)
series = []
for j in range(TIME_STEP-1):
print('photo',j)
aux = np.asarray(Image.open(dirpath+'/images/pre_images /series_{0}_Xquakemap_{1}.jpg'.format(i,j)).convert('RGB'))
print(np.shape(aux))
series.append(aux)
print(np.shape(series))
im = Image.fromarray(gallery(np.array(series)))
im.save(dirpath+'/images/gallery/series_{0}_Xquakemap.jpg'.format(i))
im_shape = (im.size)
make_array(n_photos)
# n_photos is the total of photos in the dirpath
Проблема в том, что, когда произошло добавление в список series
, форма изображения (добавлен массив NumPy) теряется. Поэтому при попытке изменить форму массива в функции gallery
возникает проблема. Вот фрагмент вывода для приведенного выше кода:
...
series 2
photo 0
(585, 619, 3)
(1, 585, 619, 3)
photo 1
(587, 621, 3)
(2,)
photo 2
(587, 621, 3)
(3,)
photo 3
(587, 621, 3)
(4,)
...
Как видно, при добавлении второй фотографии список теряет размерность. Это странно, потому что код работает первые две итерации, которые используют практически одинаковые изображения. Я пытался использовать np.stack()
, но ошибка преобладает.
Я также нахожу эту проблему на Github, но я думаю, что это не относится к этому случаю, даже если поведение аналогичное.
Работа в Ubuntu 18, Python 3.7.3 и Numpy 1.16.2.
edit: добавлено то, что @kwinkunks спросил