2016-04-03 35 views
-1

link to code and files,這是什麼倍頻代碼相當於Python代碼

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行代碼...如果我嘗試, 重塑(我,1,400)...圖像出現旋轉...我不知道如何寫5上面的python行

問題

在鏈接中隨着代碼theres是一個displayData函數。我保存了使用python作爲mat的矩陣,並且當我在矩陣上調用displayData()時,我將它加載到了八度音程上,我得到了一個旋轉的image.thats包含在link.And中,沒有這樣的八度音階問題。感謝您關注此事。

+1

由於您在尋求代碼方面的幫助,請提供您迄今獲得的工作代碼。 – albertoql

+1

我根據您在問題更新中闡明的具體問題更新了答案。但是,請閱讀以下http://stackoverflow.com/help/mcve,爲現在和將來寫出更好的問題和可驗證的代碼。總之,你應該提供一個小的可驗證的代碼,不要附加一個鏈接到整個項目,因爲人們應該能夠輕鬆地測試出錯的代碼,而不是浪費時間去理解項目。 – albertoql

+0

對此我很抱歉。我對此很陌生,下次會盡全力。 –

回答

1

對於整形數組,您可以使用numpy,然後,根據您的代碼,可以使用reshape。就你而言,你正在改變我的大小,從(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,該參數允許重新排列八度(八度http://www.gnu.org/software/octave/doc/v4.0.1/Rearranging-Matrices.html#XREFreshape中的重塑)約定的列主要樣式(Fortran)中的元素。與從八度音程獲得的相比,這導致了正確的圖像,不旋轉。

但是,考慮到您希望從2d數組獲得1d數組,您可以使用從numpy,ravel如果您想獲得I的視圖(如果可能),即修改a更改也I;或flatten,它返回I的副本,因此修改a不會更改I。但是請注意,ravelflatten都會返回一個1d數組,導致大小爲(400,)。應使用相同的order參數。

+0

我已經添加了代碼和文件的鏈接,謝謝。 –

+0

非常感謝。 –