cvCloneImage() 内存泄漏问题
cvCloneImage函数:
这个函数已验证会出现较大的内存泄露!!虽然可以释放,但因程序复杂不知道在那里释放,因为它每次拷贝是制作图像的完整拷贝包括头、ROI和数据。每次使用时编译器会分配新的内存空间,不会覆盖以前的内容。一个752*480大小或是稍小的图像,每次泄露的内存大约为1M。
解决方法:
使用cvCopy函数代替。
cvCopy(pSrcImg,pImg,NULL); //代替 pImg = cvCloneImage(pSrcImg);
pImg初始化时必须分配空间
首先获取小图像的大小:
CvSize rect=cvGetSize(SmallImg);
cvSetImageROI(BigImg,rect);
cvCopy(SmallImg,BigImg);
cvResetImageROI(BigImg);
int main(int argc, char **argv) { if (argc != 2)
return -1;
IplImage *img = cvLoadImage(argv[1], 0);
cvNamedWindow("example");
cvShowImage("example", img);
cvWaitKey(0); //一直等待按键没有这句的话图像不能正常显示
cvReleaseImage(&img); //释放图像内存
cvDestroyWindow("example"); //销毁窗口资源 //读取和显示完图像之后,要及时释放所占的内存资源.
return 0; }
//IN ONE WORD, REMEMBER RELEASE !RELEASE!RELEASE!