我想找一个Mat:
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;
}
在main函数中,我有:
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]
当我在函数内打印时,它会工作…
一旦退出getMat
函数,data
缓冲区将被释放,因此它将包含垃圾。
你需要用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;
}