Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Заполнение ОЗУ

Автор: RazrFalcon 6.12.2010, 16:26

Во время работы проги, по 20-30Мб в секунду забиваться оперативка, а потом вешается система.
Идет обработка сотен изображений.
Вот кусок кода:

Раскрывающийся текст
int main()  
{
IplImage *img1, *img2;
IpVec ipts1, ipts2;
IpPairVec matches;
int img_num1=1, img_num2=1, num=10, bmax=0;
QString temps,temps2;
for (int i=0; i<252; i++)
  {
      temps = "../image_compare/img/after/images"+QString::number(img_num1).rightJustified(4, '0')+".png";
      img1 = cvLoadImage(QString(temps).toAscii());
      surfDetDes(img1,ipts1,false,4,4,2,0.0001f);
      for (int j=0; j<359; j++)
      {
          gettimeofday(&start, NULL);
          temps = "../image_compare/img/before/images"+QString::number(img_num2).rightJustified(4, '0')+".png";
          img2 = cvLoadImage(QString(temps).toAscii());
          surfDetDes(img2,ipts2,false,4,4,2,0.0001f);
          getMatches(ipts1,ipts2,matches);
          if (matches.size() >= bmax)
          {
              bmax=matches.size();
              temps2=QString::number(img_num2);
              qDebug()<<img_num2;
          }
          img_num2++;
          ipts2.clear();
          matches.clear();
          gettimeofday(&stop, NULL);
          qDebug()<<"Afterimage:"<<img_num1<<"&"<<"Beforeimage:"<<img_num2<<"="<<matches.size()<<"time="<< ((double)stop.tv_sec + (double)stop.tv_usec/(1000*1000)) - ((double)start.tv_sec + (double)start.tv_usec/(1000*1000));
      }
      qDebug()<<temps2;
      ipts1.clear();
      matches.clear();
      img_num1++;
      img_num2=1;
  }

Автор: xls 6.12.2010, 16:46

А где в систему возвращается память , выделенная в cvLoadImage ?

Автор: RazrFalcon 6.12.2010, 17:17

Цитата(xls @ 6.12.2010, 15:46) *
А где в систему возвращается память , выделенная в cvLoadImage ?

:blink:
без понятия :mellow:

Автор: xls 6.12.2010, 17:21

Так вот эту память надо бы вернуть системе после использования. Эту функцию писали сами или она из какого-то инструментария. Обычно либо есть парная функция unloadImage, либо функция освобождения памяти либо указано, что можно освободить память стандартным delete.

Автор: RazrFalcon 6.12.2010, 17:45

Цитата(xls @ 6.12.2010, 16:21) *
Так вот эту память надо бы вернуть системе после использования. Эту функцию писали сами или она из какого-то инструментария. Обычно либо есть парная функция unloadImage, либо функция освобождения памяти либо указано, что можно освободить память стандартным delete.

Чет не подумал, посмотрел api reference, а там есть cvReleaseImage(&img);. Все, теперь оперативка стабильна. Спасибо.
PS инструментарий opencv

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)