我正试图找到一个垫子:
Mat getMat(){
double data[9] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0};
Mat H = Mat(3, 3, CV_64FC1, data);
return H;
}
在我的主要功能中:
cout << getMat() << endl;
但我明白了:
[9.803620554343549e-312, 9.815415529972478e-312, -5.314010372517808e+303;
6.952533064904583e-310, 6.952533112667539e-310, 6.952533065625869e-310;
6.952531771280892e-310, 6.952531720111155e-310, 1.30821040513014e-310]
当我在函数内部打印时,它可以工作..
答案 0 :(得分:4)
退出data
函数后,getMat
缓冲区将被释放,因此它将包含垃圾。
您需要使用clone()
复制数据缓冲区:
Mat getMat(){
double data[9] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0};
Mat H = Mat(3, 3, CV_64FC1, data).clone();
return H;
}
对于小型矩阵,您还可以使用:
Mat getMat(){
Mat H = (Mat1d(3, 3) << 0.0, 1.0, 2.0,
3.0, 4.0, 5.0,
6.0, 7.0, 8.0);
return H;
}