OpenCV 合并两张图片

时间:2022-07-15 23:47:39


opencv 中的cvcopy


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!