如何从双数组初始化Mat?

时间:2016-08-24 21:47:36

标签: c++ opencv

我正试图找到一个垫子:

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] 

当我在函数内部打印时,它可以工作..

1 个答案:

答案 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;
}