opencv中图像连续显示的内存泄露问题的解决办法

最近在利用opencv做一个视频检测模块,其中涉及到要把检测后的图像一帧帧的显示出来,形成视频流的感觉。

问题在于如果利用如下的代码进行连续的图像显示,内存泄露非常严重,不出几分钟,我的4G内存的本本就吃不消了。

原用于连续显示的代码:

int i = 0;
IplImage* img = 0;
char *image_name = "D:/project_java/VideoServer/img/1.jpg";
printf("------------- image to video ... ----------------\n");
int isColor = 1;
//创建窗口
cvNamedWindow( "Image", CV_WINDOW_AUTOSIZE );
while(1)
{
   printf("%s%d%s", "image", ++i, ".jpg\n");
   img = cvLoadImage(image_name);
   if((img)
   {
      cvShowImage("Image", img.data);
      char key = cvWaitKey(30);
   }
   else
   {
      printf("Could not load image file...\n");
      cvWaitKey(30);
      //exit(0);
   }
}
cvDestroyWindow("Image");

上面代码的头文件是:

#include <cv.h>

#include <highgui.h>

#include <stdio.h>

#include <stdlib.h>

考虑到我用的是最新的opencv2.4.9,里面有新的图像读取和显示函数,于是我针对上述代码做了改动:

int i = 0;
//IplImage* img = 0;
Mat img;
char *image_name = "D:/project_java/VideoServer/img/1.jpg";
printf("------------- image to video ... ----------------\n");
//创建窗口
cvNamedWindow( "Image", CV_WINDOW_AUTOSIZE );
while(1)
{
   printf("%s%d%s", "image", ++i, ".jpg\n");
   //img = cvLoadImage(image_name);
   img = imread(image_name);
   //cvShowImage("Image", img.data);
   if((img.data)
   {
       imshow("Image",img);
       char key = cvWaitKey(30);
   }
   else
   {
      printf("Could not load image file...\n");
      cvWaitKey(30);
      //exit(0);
   }
}
cvDestroyWindow("Image");

此时头文件为:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <stdio.h>
#include <stdlib.h>

using namespace cv;

现在发现内存泄露的问题迎刃而解了。看来学会使用最新的版本还是很重要的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章