2016-04-03 6 views
-1

link to code and filesWas die äquivalente Python-Code für diese Oktave Code ist

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); 

ich ein Bild lesen und resizzed es bis zu 20 * 20 und konvertiert sie dann Matrix und dann die Graustufen .Alle diese finde ich in tun können Python auch .... aber ich kann nicht die 5. Zeile Code ... wenn ich es versuchte, umformen (I, 1.400) ... das Bild erscheint gedreht ... Ich weiß nicht, wie man schreibt die 5 die Linie, wie oben in Python

das Problem

in der Verbindung zusammen mit dem Code theres ist eine displayData Funktion. Ich speicherte die Matrix, die ich mit Python als Matte und lud es auf Oktave, wenn ich displayData() auf der Matrix rief ich bekam ein gedrehtes Bild.hat Inclued in der Verbindung.Und theres kein Problem in der Oktave. Danke, dass du dir das angeschaut hast.

+1

Da Sie um Hilfe mit Ihrem Code bitten, geben Sie bitte einen Arbeitscode, den Sie bis jetzt erhalten haben. – albertoql

+1

Ich habe die Antwort entsprechend dem spezifischen Problem aktualisiert, das Sie mit der Aktualisierung Ihrer Frage geklärt haben. Bitte lesen Sie jedoch das folgende http://stackoverflow.com/help/mcve, um eine bessere Frage und einen überprüfbaren Code für jetzt und die Zukunft zu schreiben. Zusammenfassend sollten Sie einen kleinen überprüfbaren Code bereitstellen und keinen Link zum gesamten Projekt hinzufügen, da die Benutzer in der Lage sein sollten, den Fehler verursachenden Code einfach zu testen und keine Zeit mit dem Versuch zu verschwenden, das Projekt zu verstehen. – albertoql

+0

Es tut mir leid, dass. Ich bin neu zu diesem, werde versuchen mein bestes nächstes Mal. –

Antwort

1

Zum Umformen eines Arrays können Sie numpy verwenden, und nach Ihrem Code können Sie reshape verwenden. In deinem Fall änderst du die Größe von I von (20,20) auf (1,400). Ein vollständiges Beispiel, das den resultierenden umgeformten Array zu einer Matte Datei speichert, unter Verwendung von OpenCV APIs für die Bildverarbeitung ist:

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}) 

Hinweis der zweite Parameter von reshape, der ein Tupel die neue Größe des Arrays enthalten, . Beachten Sie auch den dritten Parameter order, der es erlaubt, Elemente im Stil der Spalten-Dur (Fortran) anzuordnen, was die Konvention der Oktave ist (siehe Umformung in Oktave http://www.gnu.org/software/octave/doc/v4.0.1/Rearranging-Matrices.html#XREFreshape). Dies führt zu einem korrekten Bild, nicht gedreht, verglichen mit dem, das von der Oktave erhalten wurde.

jedoch angesichts der Tatsache, dass Sie von einer 2D-Array erhalten mögen ein 1D-Array, können Sie von numpy verwenden, ravel wenn man einen Blick auf I (wenn möglich) erhalten möge, nämlich eine Änderung von a Änderungen auch I; oder flatten, die eine Kopie von I zurückgibt, so ändert a ändert sich nicht I. Beachten Sie jedoch, dass sowohl ravel als auch flatten ein 1d-Array zurückgibt, was zu einer Größe von (400,) führt. Derselbe order Parameter sollte verwendet werden.

+0

Ich habe den Link zum Code und den Dateien hinzugefügt.Vielen Dank. –

+0

Vielen Dank. –