2016-04-14 16 views
1

Also ich habe ein Objekt mit drei globalen Mat (bei mir tragen), möchte ich mit Doppel füllen, ich habe auch ein DruckverfahrenOpenCV C++ Mat MADNESS

so in Main.hpp

Main class { 
... 
Mat FIXED; 
Mat one; 
Mat two; 
... 
} 

und in meinem Main.cpp ich habe

void Main::printMat(Mat mat) { 
    int rows = mat.rows; 
    int cols = mat.cols; 
    for (int j = 0, j < cols; j++) { 
     for (int i = 0, i < rows; i++) { 
      printf("%lf ", mat.at<double>(i,j)); 
     } 
     printf("\n"); 
    } 
} 

fein Also für jeden Matrixeingang es alles speichert.

printMat(one); <--this works 

Dieses feine funktioniert, aber ich tun dann

two = FIXED.clone(); 

DANN DIESES BREAKS, habe ich keine Ahnung, warum HELP

printMat(one); <--this doesnt work 

Wenn ich die .clone auf Kommentar() line es funktioniert, wenn ich eine leere Matrix der gleichen Größe und speichern, um FIXED funktioniert es nicht.

+1

Alle Matrizen sind vom Typ 'CV_64FC1'? Wenn nicht, wird das wahrscheinlich brechen. sollten Sie 'printMat' nicht von einer Instanz der Klasse Main aufrufen? BTW, können Sie einfach 'cout << mat << endl;' für das Drucken von Matrizen – Miki

+0

Think es standardmäßig 1 Kanal nicht sicher. Wie auch immer, es war mein Fehler Ich schrieb eine Antwort auf. Raten Sie Rookie-Fehler Referenc vs Wert Fehler, aber leicht verwirrend. – Vroosh

+0

Ich verstehe nicht, warum Sie die Matrix beim Drucken transponieren (Ihr Code druckt die Werte jeder Spalte in einer Zeile, dann Zeilenumbruch und gehen Sie zur nächsten Zeile), noch warum Sie nicht 'cout' verwenden, aber Sie können bewerkstellige dieselbe Aufgabe mit etwas besser lesbarem (IMHO): 'für (int j = 0, j (i, j)); } printf ("\ n"); } ' –

Antwort

1

Für jeden, der damit zu kämpfen hat, war der Grund, wie ich das eine Array erstellt habe.

Also machte ich ein Druckverfahren zunächst wegen

cout << someMat << endl; 

mir gab seltsame Zahlen

stellt sich heraus, das ist der Fehler genau dort, soll es mir normale Werte geben, die ich in gespeichert.

Ich machte die Matte innerhalb einer Methode, indem ich ein Array [Zeile] [Spalte] unter Verwendung

eingab

Es stellt sich heraus, dass der Konstruktor die Referenz des Arrays und NOT den Wert verwendet, und so verliere ich, wenn ich die Methode verlasse, dieses Bit des Speichers zum Garbage Collector.

Die Tatsache, dass es nach der Zeile, die ich erwähnte, brach, war reiner Zufall. (Da dies in einer anderen Methode war und dieser Punkt entschied sich der GC zu klären)

+2

Es gibt keinen Garbage Collector in C++; D – Miki

+0

Ahaha fühlen sich frei zu beheben, das C++ Zeug ist so aus meiner Liga – Vroosh

+0

kann ich nicht. Ich verstehe nicht einmal, wo das Problem lag, da Sie nicht den ganzen relevanten Code gezeigt haben.Ich denke, Sie können die Frage einfach löschen, da Sie eine Lösung finden, aber es gibt keine Informationen darüber, wie andere davon profitieren können. – Miki