Измените форму матрицы изображения в Python

Сначала я хочу преобразовать исходное изображение (где форма и dtype равны ((1024, 1024, 3), dtype('uint8'))) в одномерный массив, чтобы я мог ввести этот одномерный массив в обучающий набор как одно наблюдение.

Теперь я хочу преобразовать этот одномерный массив в исходную форму.

Для преобразования исходного изображения в одномерный массив я использовал функцию flatten(), доступную в numpy. Ниже приведен код:

In[80]: t = misc.imread('b.png') #to read the image

In[81]: t.shape, t.dtype
Out[81]: ((1024, 1024, 3), dtype('uint8'))

#To convert the above image into 1D array

In[82]: t.flatten()
Out[82]: array([  5,  40, 121, ..., 130, 110,  89], dtype=uint8)

Теперь я хочу преобразовать указанную выше матрицу (результат t.flattern()) в исходную матрицу (т.е. (1024,1024,3) по форме).

Подскажите, пожалуйста, что мне делать.

Обновление: я проверил форму t.flatten, и оказалось, что

In[86]: p=t.flatten()
In[87]: p.shape
Out[86]:(6291456,) 

Но 6291456 = (1024 * 1024 * 3 * 2). Теперь я не понимаю, откуда взялся этот дополнительный термин (например, 2).

Я также использовал команду reshape, но когда я выполнял команду, появляется ошибка.

l=p.reshape(1024,1024,3)

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-89-b1ab41666df7> in <module>()
----> 1 l=p.reshape(1024,1024,3)

ValueError: total size of new array must be unchanged

person Lok    schedule 14.01.2017    source источник
comment
Просто reshape нужной формы?   -  person Divakar    schedule 14.01.2017
comment
@Divaker Я использовал его, но он показывает некоторую неопределенную ошибку   -  person Lok    schedule 14.01.2017
comment
Я не могу воспроизвести p.shape превращение (6291456,) для массива данной исходной формы.   -  person akilat90    schedule 14.01.2017
comment
@ akilat90, если вы последуете тому, что я сделал, я думаю, вы сможете получить такой же результат   -  person Lok    schedule 14.01.2017


Ответы (1)


Используйте 1_,

In [93]: a = np.zeros((10,10,3))
In [94]: a.shape
Out[94]: (10, 10, 3)

In [95]: b = a.flatten()
In [96]: b.shape
Out[96]: (300,)

In [97]: c = b.reshape(10,10,3)
In [98]: c.shape
Out[98]: (10, 10, 3)
person Rahul K P    schedule 14.01.2017