2013-06-23 2 views
0

Voici mon code:OpenCV Erreur: Mémoire insuffisante (Failled à alloué) lorsque j'utilise l'EIPD()

void Init() // For the first frame. 
{ 
    Mat in=cv::imread("img1.jpg"); 
    SIFT* s=NULL; 
    vector<cv::KeyPoint> key;key.clear(); 
    Mat* descriptors=NULL; 
    _CrtMemState Sh1,Sh2,Sh_Diff; 
    _CrtMemCheckpoint(&Sh1); 
    s = new SIFT(); 
    descriptors = new Mat(); 
    (*s)(in, Mat(), key, *descriptors); 
    delete s; 
    _CrtMemCheckpoint(&Sh2); 
    _CrtMemDifference(&Sh_Diff, &Sh1, &Sh2); 
    _CrtMemDumpAllObjectsSince(&Sh_Diff); 

    GetKCent(*descriptors);key.clear(); 
    mask=cv::Scalar(0); 
    mask(selection)=cv::Scalar(255); 
    Mat mask(in.rows,in.cols,CV_8U); 
    s=new SIFT(); 
    if (descriptors!=NULL) delete descriptors; 
    descriptors = new Mat(); 
    (*s)(in,mask,key,*descriptors); 
    delete s; 
} 

L'erreur de mémoire insuffisante est survenue lorsque le programme exécute cette ligne

(*s)(in,mask,key,*descriptors); 

C'est le second sift :: operator(). Je pense que la mémoire peut fuir. Qui peut m'aider?

+0

En fait, j'ai le même problème. L'avez-vous déjà résolu? – flexwang

Répondre

0

Je crois que votre version d'opencv est 2.4.4 ou plus tard. Je rencontre le même problème en utilisant opencv 2.4.7 et 2.4.8. Ensuite, je reviens à 2.4.3 et tout se passe bien. Je crois que c'est un bug avec opencv récente.

Questions connexes