2016-12-20 1 views
-1

Ich habe diesen Code in OpenCV:OpenCV Reihe assignmement verschiedene Werte

cv::Mat1f codes(x,y); 
... 
for(int i=0; i<codes.rows ; i++){ //you don't care about n 
    cv::Mat code(1,codes.cols, codes.type()); 
    encode_(..., code); //fill code with values 
    codes.row(i) = code; 
    std::cout<<"code= "<<code<<std::endl; 
    std::cout<<"codes.row= "<<codes.row<<std::endl; 
} 

jedoch die gedruckten Werte differents sind:

code= [-0.0018070865, -0.0088188984, -0.001866244, 0.0071420735, -0.00046708167, -0.0011722896, ... 
codes.row= [0.091074832, 0.10463701, 0.060412209, 0.075102232, 0.036429934, 0.018214967, ... 

Warum geschieht das?

+1

Das richtige Werkzeug, um solche Probleme zu lösen, ist Ihr Debugger. Sie sollten Schritt für Schritt durch Ihren Code * gehen, bevor Sie auf Stack Overflow nachfragen. Für weitere Hilfe lesen Sie bitte [Wie kleine Programme zu debuggen (von Eric Lippert)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Zumindest sollten Sie Ihre Frage bearbeiten, um ein [minimales, vollständiges und verifizierbares] (http://stackoverflow.com/help/mcve) Beispiel einzufügen, das Ihr Problem zusammen mit den Beobachtungen, die Sie in der Debugger. –

+0

Es tut mir leid, aber Sie sollten fragen, bevor Sie davon ausgehen, dass ich nicht weiß, wie Sie einen Debugger verwenden, den ich zu verwenden weiß. Es gibt ** viele ** gut bewertete Fragen, wie meine hier. Mein Code ist minimal (es ist kein zusätzlicher Code enthalten, sondern nur derjenige, den Sie zum Verständnis des Problems benötigen), vollständig (keine Informationen werden verpasst, um das Problem zu verstehen) und verifizierbar (der Code funktioniert in einem geeigneten Programm). Das Debuggen von OpenCV mit herkömmlichen Debuggern hilft nicht, da es sich um ein großes Framework handelt und Sie nicht zu viel in der Bibliothek finden können. – justHelloWorld

+0

Verstehen Sie Ihr Framework, bevor Sie es verwenden! –

Antwort

0

Im Anschluss an die Dokumentation von Mat::row ich selbst herausgefunden, dass das Ersetzen:

codes.row(i) = code; 

mit:

code.row(0).copyTo(codes.row(i)); 

das Problem gelöst ... aber warum? : D Ich denke, es ist etwas mit Bezugsköpfen verwandt, aber ich kann den Mechanismus im Detail nicht verstehen.