2016-08-24 60 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