2016-08-24 64 views
2

我试图得到一个垫:如何从double数组初始化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; 
} 

在主函数中我有:

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] 

当我打印的功能,在它里面工作..

+2

此代码按预期工作对我来说。请仔细检查你是否发布了实际的代码 – Miki

+0

哦..谢谢..真的,我从函数Mat getMat()返回H,然后我做cout << geMat() –

+1

这没有帮助; D。请发表[mcve] – Miki

回答

4

该缓冲区将被释放,一旦你e xit 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; 
} 
+0

谢谢。我明白了,但我在返回前做了预先计算。我会尝试你给我的第一个选项.. –

+0

它的工作原理。谢谢。我会更加小心块和释放..:P –

+0

很高兴它帮助; D – Miki