这些天在弄OpenCV,用来把两张640*480的图片拼在一起,拼成1280*480,然后发现调用下面这个函数的时候内存一直在增大,貌似有些变量无法释放内存.
[c language=”++”]
void Show2Image(cv::Mat cvImg1, cv::Mat cvImg2)
{
beginTime =clock();
std::cout<<“图片合并开始时间:”<<beginTime<<std::endl;
IplImage* image1=&cvImg1.operator IplImage();
IplImage* image2=&cvImg2.operator IplImage();
IplImage* image3 = cvCreateImage( cvSize(image1->width+image2->width,MAX(image1->height,image2->height)),IPL_DEPTH_8U,3);
CvRect rect=cvRect(0,0,image1->width,image1->height);
cvSetImageROI(image3,rect);
cvCopy(image1,image3);
cvResetImageROI(image3);
rect=cvRect(image1->width,0,image2->width,image2->height);
cvSetImageROI(image3,rect);
cvCopy(image2,image3);
cvResetImageROI(image3);
cvShowImage(“Kinect Follow & Xtion ObstacleAvoide”,image3);
//cvReleaseImage(&image3);
endTime =clock();
std::cout<<“结束时间:”<<endTime<<std::endl
<<“图片合并花费时间:”<<endTime-beginTime<<std::endl<<std::endl;
}
[/c]
经过排查,发现是
IplImage* image3 = cvCreateImage( cvSize(image1->width+image2->width,MAX(image1->height,image2->height)),IPL_DEPTH_8U,3);
这句代码导致内存增大.
然后发现cvCreateImage需要和cvReleaseImage配合用,譬如上述代码,需要用cvReleaseImage(&image3);来释放image3的内存,而image1和image2不是用cvCreateImage创建的,所以不用使用cvReleaseImage来释放,假如你使用了,反而会报错.