如何从双数组初始化Mat ?



我想找一个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;
} 

相关内容

  • 没有找到相关文章

最新更新