2016-04-03 3 views
-1

link to code and filesЧто эквивалентно питон код этой октаве код

1.I =imread('one.jpg'); 

2.I = inresize(I,[20,20]); 
3.I=im2double(I); 
4.I=mean(I,3); 
#This next line 
5.a = reshape(I,[],400); 

Я прочитал изображение и resizzed его 20 * 20, а затем превращают его в матрицу, а затем найти в оттенках серого .Все это я могу сделать в Python тоже .... но я не могу сделать 5-ю строку кода ... если бы я попытался, reshape (I, 1,400) ... изображение поворачивается ... Я не знаю, как писать 5 линия, как описано выше в Python

проблема

в ссылке вместе с кодом theres - функция displayData. Я сохранил матрицу, которую я получил с помощью python в качестве мата и загрузил ее на октаву, когда я назвал displayData() на матрице, я получил повернутое изображение. Это включено в ссылку. И нет такой проблемы в октаве. Спасибо, что посмотрели на это.

+1

Как вы просите о помощи с вашим кодом, предоставьте рабочий код, который вы получили до сих пор. – albertoql

+1

Я обновил ответ в соответствии с конкретной проблемой, которую вы уточнили с обновлением вашего вопроса. Однако, пожалуйста, прочитайте следующий http://stackoverflow.com/help/mcve, чтобы написать лучший вопрос и проверяемый код, на данный момент и в будущем. Таким образом, вы должны предоставить небольшой проверяемый код и не прикреплять ссылку на весь проект, так как люди должны иметь возможность легко протестировать код, который дает ошибку, а не тратить время на попытки понять проект. – albertoql

+0

Прошу прощения за это. Я новичок в этом, попробую в следующий раз. –

ответ

1

Для изменения размера массива вы можете использовать numpy, и, следуя вашему коду, вы можете использовать reshape. В вашем случае вы меняете размер I, от (20,20) до (1,400). Полный пример, который сохраняет полученный видоизмененный массив в файл мат, используя OpenCV интерфейсы API для работы с изображениями, является:

import numpy as np 
import cv2 
import scipy.io 

I = cv2.imread('one.jpg') 
I = cv2.resize(I,(20,20)) 
I = cv2.normalize(I.astype('float'), None, 0.0, 1.0, cv2.NORM_MINMAX) 
I = np.mean(I, axis=2) 
a = np.reshape(I, (1,400), order='F') 
scipy.io.savemat('a.mat', mdict={'a': a}) 

Обратите внимание на второй параметре reshape, который представляет собой кортеж, содержащий новый размер массива , Также обратите внимание на третий параметр order, который позволяет переупорядочить элементы в стиле столбцов (Fortran), который является условным обозначением октавы (см. Изменение в октаве http://www.gnu.org/software/octave/doc/v4.0.1/Rearranging-Matrices.html#XREFreshape). Это приводит к правильному изображению, без поворота, по сравнению с полученным из октавы.

Однако, учитывая тот факт, что вы хотите получить от 2d массива а 1d массив, вы можете использовать, из NumPy, ravel если вы хотите, чтобы получить вид I (если это возможно), а именно модификация a изменений также I; или flatten, который возвращает копию I, при этом изменяется a не изменяется I. Однако обратите внимание, что как ravel, так и flatten возвращает 1d-массив, в результате чего размер (400). Необходимо использовать тот же параметр order.

+0

Я добавил ссылку на код и файлы. Спасибо. –

+0

Большое спасибо. –