Bonjour mes amis,

En fait, je suis encours de travailler sur l'extraction de caractéristique d'une base de données des images suivant ce code source:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
#include "stdafx.h"
#include <sstream>
#include <time.h>
#include <fstream>
#include <iostream>
#include <highgui.h>
#include <cv.h>
#include <iomanip>
#include <opencv2/ml/ml.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/core/mat.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/legacy/compat.hpp>
#include <opencv2/nonfree/nonfree.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2\features2d\features2d.hpp>
#include <opencv2\nonfree\features2d.hpp>
 
using namespace std;
using namespace cv;
 
    void save_descriptor_in_file(Mat desc)
    {
        //faire tourner ce programme la première fois avec « data_nosmile.txt » et la seconde avec « data_smile.txt »
        ofstream myfile ("C:/Users/bahri/Desktop/haythem/SVM/features extraction/test_OpenCV_2.4.2/data_nosmile.txt",ios::app);                
        //ofstream myfile ("C:/Users/bahri/Desktop/haythem/SVM/features extraction/test_OpenCV_2.4.2/data_smile.txt",ios::app);        
        if (myfile.is_open())
        {  
            //for(int i=0 ; i<desc.rows ; i++)
            for(int i=0 ; i<10 ; i++) // on limite le nombre de descripteurs par image à 10
            {              
                for(int j=0; j<desc.cols ; j++)//desc.cols est ici toujours égale à 128
                {        
                    myfile<<desc.at<float>(i,j)<<"\n";
 
                }
            }
        }
        else
        {
            cout<<"error : Unable to open file";
        }
    }
 
void display_image_descriptors(Mat image){
namedWindow("Descriptors", 1);
imshow("Descriptors", image);
}
 
void calculate_descriptor(Mat img_cropped){
SurfFeatureDetector detector(1500);
vector<KeyPoint> keypoints;
Mat descriptors;
SurfDescriptorExtractor extractor;
detector.detect(img_cropped, keypoints);
extractor.compute(img_cropped, keypoints, descriptors);
drawKeypoints(img_cropped, keypoints, img_cropped, Scalar(255,255,255), DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
//display_image_descriptors(img_cropped); ////optionnel////
Mat desc = Mat(descriptors).reshape(0, keypoints.size());
save_descriptor_in_file(desc);
}
 
void display_image(IplImage* image){
cvNamedWindow("Image", 1 );
cvShowImage( "Image", image);
}
 
void load_image(int i){
ostringstream ostr;
//faire tourner ce programme la première fois avec "-11.jpg" et la seconde avec "-12.jpg"
ostr <<  "C:/Users/bahri/Desktop/haythem/SVM/ensemble d'entrainement/les deux ensembles/"<<i<<"-11.jpg";
//ostr << "C:/Users/bahri/Desktop/haythem/SVM/ensemble d'entrainement/les deux ensembles/"<<i<< "-12.jpg";
string s = ostr.str();
char* chemin = &s[0];
Mat img_original=cvLoadImage(chemin);
Mat img_cropped = img_original(Rect(240, 140, 180, 220));
Ptr<IplImage> img = &img_cropped.operator IplImage();
    if(img !=NULL){
     //   display_image(img);////optionnel////
        calculate_descriptor(img_cropped);
        }
    else{
        cout<<"error: can’t open image "<<i;
        }
 }
 
int main(){
 
//décommentez pour voir les images une à une après appui sur la touche ‘espace’
//  int key=0;
//  int i=1;
//  do{
for(int i=1; i<=180; i++){
    load_image(i);
// cout<<i<<"\n";
//  key = cvWaitKey();
}
//  i++;
//  }while(key==32);//si appui sur la touche ‘espace’
    return 0;
}
mais lorsque je débogue ce code avec une version d'OpenCV 2.4.6 il me donne cette erreur
OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[
1]*channels()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3) - 1))*4) & 15) == elemSize1()) in unknown function, file c
:\opencv 2.6.0\build\include\opencv2\core\mat.hpp, line 537
Qui peut m'aider svp à corriger cette erreur.
Merci