Во время работы проги, по 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;
}
А где в систему возвращается память , выделенная в cvLoadImage ?
Так вот эту память надо бы вернуть системе после использования. Эту функцию писали сами или она из какого-то инструментария. Обычно либо есть парная функция unloadImage, либо функция освобождения памяти либо указано, что можно освободить память стандартным delete.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)