1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
using namespace std;
Personne::Personne(string nomN){
this->nom=nomN;
this->nbrImages=0;
}
// Foncteur servant à libérer un pointeur - applicable à n'importe quel type
struct Delete {
template <class T> void operator ()(T*& p) const{
delete p;
p = NULL;
}
};
Personne::~Personne(){
//Destruction de la liste des images d apprentissage
for_each(this->listeVisage.begin(), this->listeVisage.end(), Delete());
this->listeVisage.clear();
//Destruction de la liste des images d optimisation
//delete this->listeOptimisation;
for_each(this->listeOptimisation.begin(), this->listeOptimisation.end(), Delete());
this->listeOptimisation.clear();
}
void Personne::chargerPersonne(string cheminBase){
cout << "--> Personne : chargerPersonne STARTING"<<endl;
char personneListFileName[512];
int varParc=0;
//Nettoyage de l ancien vecteur de base
this->listeVisage.clear();
this->listeOptimisation.clear();
sprintf(personneListFileName,"%s/%s/base/%s.lst",cheminBase.c_str(),this->get_nom().c_str(),this->get_nom().c_str());
cout<<personneListFileName<<endl;
// le constructeur de ifstream permet d'ouvrir un fichier en lecture
ifstream fichier(personneListFileName);
if (fichier){ // ce test échoue si le fichier n'est pas ouvert
string ligne; // variable contenant chaque ligne lue
// cette boucle s'arrête dès qu'une erreur de lecture survient
while ( getline( fichier, ligne ) ){
varParc++;
IplImage* image = cvLoadImage( ligne.c_str(), 1 );
if (image){
this->test.push_back(image);
this->listeVisage.push_back(image);
cvReleaseImage( &image );
}
else{
}
}
}
else{
cout << "|WARNING|--> Personne : chargerPersonne\t:\t visage list file doesn't exist\n";
}
cout << "--> Personne : chargerPersonne\t:\t"<<varParc<<" visage charged\n";
cout << "--> Personne : chargerPersonne LEAVING"<<endl;
}
void Personne::enregistrePersonne(string cheminBase){
cout << "--> Personne : enregistrePersonne STARTING"<<endl;
char personneListFileName[512];
char commandeCreatRep[512];
char visageFileName[512];
int varParc=0;
list<IplImage *>::iterator IlisteVisage;
list<IplImage *>::iterator IlisteOptimisation;
sprintf(personneListFileName,"%s/%s/%s.lst",cheminBase.c_str(),this->get_nom().c_str(),this->get_nom().c_str());
sprintf(commandeCreatRep,"mkdir %s/%s",cheminBase.c_str(),this->get_nom().c_str());
system(commandeCreatRep);
ofstream file(personneListFileName, ios_base::app );
cout << "--> Personne : enregistrePersonne \t:\t saving listeVisage in progress ..."<<endl;
for(list<IplImage *>::const_iterator iter = listeVisage.begin();iter != listeVisage.end();++iter)
{
cout<<varParc<<endl;
sprintf(visageFileName,"%s/%s/%s_%d.jpg",cheminBase.c_str(),this->get_nom().c_str(),this->get_nom().c_str(),varParc);
file <<visageFileName<<endl;
varParc++;
IplImage* image = test[varParc];
cvSaveImage(visageFileName,image);
//IplImage *pTemp = cvCloneImage(test[1]);
cvReleaseImage( &image );
}
cout<<this->listeVisage.size()<<endl;
for(this->listeVisage.begin(); IlisteVisage!=this->listeVisage.end(); IlisteVisage++){
cout<<varParc<<endl;
//sprintf(visageFileName,"%s/%s/%s_%d.jpg",cheminBase.c_str(),this->get_nom().c_str(),this->get_nom().c_str(),varParc);
//file <<visageFileName<<endl;
//cvSaveImage(visageFileName,*IlisteVisage);
varParc++;
}
for(this->listeOptimisation.begin(); IlisteOptimisation!=this->listeOptimisation.end(); IlisteOptimisation++){
sprintf(visageFileName,"%s/%s/%s_%d.jpg",cheminBase.c_str(),this->get_nom().c_str(),this->get_nom().c_str(),varParc);
file <<visageFileName<<endl;
//cvSaveImage(visageFileName,(* IlisteOptimisation));
varParc++;
}
cout << "|REPORT|--> Personne : enregistrePersonne \t:\t"<<varParc<<" visage saved\n";
cout << "--> Personne : enregistrePersonne LEAVING"<<endl;
}
int main(int argc, char *argv[])
{
Personne* alex=new Personne("alex");
alex->chargerPersonne("/home/taf/Devellopement/Matlab/DRVH_Matlab/base");
//Jusque la pas d erreur
alex->enregistrePersonne("/home/taf/Devellopement/testEcriture");
return EXIT_SUCCESS;
} |
Partager