2016-04-03 37 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

非常感谢。 –