#define ChessBoardSize_height 9
#define ChessBoardSize_width 7
void InitCorners3D(CvMat *Corners3D,int NImages, float SquareSize)
{
int CurrentImage = 0;
int CurrentRow = 0; //行
int CurrentColumn = 0; //列
int NPoints = ChessBoardSize_height*ChessBoardSize_width;
float temppoints[63*3]={0};
for (CurrentImage = 0 ; CurrentImage < NImages ; CurrentImage++)//图片
{
for (CurrentRow = 0; CurrentRow < ChessBoardSize_height; CurrentRow++)//行
{
for (CurrentColumn = 0; CurrentColumn < ChessBoardSize_width; CurrentColumn++)//列
{
temppoints[(CurrentImage*NPoints*3)+(CurrentRow*ChessBoardSize_width + CurrentColumn)*3]=(float)CurrentRow*SquareSize;
temppoints[(CurrentImage*NPoints*3)+(CurrentRow*ChessBoardSize_width + CurrentColumn)*3+1]=(float)CurrentColumn*SquareSize;
temppoints[(CurrentImage*NPoints*3)+(CurrentRow*ChessBoardSize_width + CurrentColumn)*3+2]=0;
}
}
}
*Corners3D= cvMat(NImages*NPoints,3,CV_32FC1,temppoints);
// cvSetData(Corners3D,temppoints,sizeof(CV_32FC1));
//cvReleaseData(&temppoints);问题所在,多释放了一个内存
}
cvReleaseData(&temppoints)问题在这里,内存管理上的问题,在opencv上,想image mat window类型开辟的空间必须释放,不然会造成内存泄露,但是对于基本的类型例如数组d点,像素。。。这些在局部调用完以后,系统会自动释放,如果你再去内存方面的处理,就会出现问题,这个问题是什么。。。。。。会对内存造成什么影响呢。。。。
文章评论(0条评论)
登录后参与讨论