1.在一个函数中使用局部数组变量给CvMat数据赋值,当在函数外使用这个CvMat时,其中的数据出错,函数如下:
void CSuperResolution::InitConf()
{double filterG[4] = {1,0,0,-1};
conf.filterG = cvCreateMat(1,4,CV_64FC1);
cvSetData(conf.filterG,filterG,conf.filterG->step);
}
2.原因分析:
CvSetData只是给生成的CvMat传入了局部数组变量的指针,当超出此作用域后,指针所指的区域释放,数值就会错误。
3.解决方法:
新建一个函数,利用CvMat矩阵的指针给其元素直接赋值,这样就不会出错,如下所示:
void CSuperResolution::InitConf()
{double filterG[4] = {1,0,0,-1};
conf.filterG = cvCreateMat(1,4,CV_64FC1);
//cvSetData(conf.filterG,filterG,conf.filterG->step);
SetDataFilterG(conf.filterG,filterG);
}
void CSuperResolution::SetDataFilterG(CvMat *filterG,double *arrFilterG)
{
int nNum = filterG->rows*filterG->cols;
for(int i = 0;i < nNum;i++)
{
double* dbVal = filterG->data.db;
dbVal[i] = arrFilterG[i];
}
}