私は以前にOpenCVでの行列乗算について質問し、正しい答えを見つけることができました。ただし、これを実行しようとすると、誤った結果が得られます。
#include <iostream>
#include <cmath>
#include "opencv2/core/core.hpp"
using namespace std;
int main() {
// Vars.
int a[4] = {3,2,1,4};
int b[4] = {2,5,6,1};
// Pointers
int *p1, *p2;
int res(5);
// Init.
p1 = &a[0];
p2 = &b[0];
for(int i=0;i<4;i++) {
res += (*(p1+i) - 2)*(*(p2+i) - 3);
}
cout << res << endl; // This is fine!
unsigned int p[4] = {3,1,2,4};
cv::Mat testMat = cv::Mat(1,4,CV_8U,p);
cout << testMat << endl; // Shows [3, 0, 0, 0] !!!!!
cout << testMat.at<unsigned int>(0,3) << endl; // Displays 4
//cv::Mat resDot = testMat*(testMat.t());
cv::Mat testMatTransp(testMat.t());
cout << testMatTransp.at<unsigned int>(0,0) << endl; // Shows Jibrish 56928323
return(0);
}
私が何かを見逃していない限り、これはすべての情報を正しく印刷するはずですよね?デストラクタか何かを呼び出すことになっていますか?RAIIに基づいていると思ったので、「新しい」ベースの初期化を使用しない限り、デストラクタを呼び出す必要はありません。そうですか?正しい方向に少しでも動かしていただければ幸いです。