2017-01-14 15 views
1

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

Теперь я хочу преобразовать этот массив 1D в его оригинальную форму.

Для преобразования исходного изображения в массив 1D я использовал 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) в форме).

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

Update: Я проверил форму t.flatten и выходит быть

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

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

Я также использовал команду 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 
+0

Просто 'reshape' с желаемой формы? – Divakar

+0

@Divaker Я использовал его, но его показывал некоторую неопределенную ошибку. – Lok

+0

Я не могу воспроизвести 'p.shape' становление' (6291456,) 'для массива заданной начальной формы. – akilat90

ответ

0

Использование reshape,

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) 
+0

Я обновил свою проблему, пожалуйста, посмотрите его снова. – Lok