Bonjour,
je cree un projet Qt, qui utilise la librairie ml de Opencv,

le main.cpp contient ceci:
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <cv.h>
#include <highgui.h>
#include <ml.h>
#include <time.h>
 
int
main (int argc, char **argv)
{
  const int s = 1000;
  int size = 400;
  int i, j, sv_num;
  IplImage *img;
  CvSVM svm = CvSVM ();
  CvSVMParams param;
  CvTermCriteria criteria;
  CvRNG rng = cvRNG (time (NULL));
  CvPoint pts[s];
  float data[s * 2];
  int res[s];
  CvMat data_mat, res_mat;
  CvScalar rcolor;
  const float *support;
 
 
  img = cvCreateImage (cvSize (size, size), IPL_DEPTH_8U, 3);
  cvZero (img);
 
 
  for (i = 0; i < s; i++) {
    pts[i].x = cvRandInt (&rng) % size;
    pts[i].y = cvRandInt (&rng) % size;
    if (pts[i].y > 50 * cos (pts[i].x * CV_PI / 100) + 200) {
      cvLine (img, cvPoint (pts[i].x - 2, pts[i].y - 2), cvPoint (pts[i].x + 2, pts[i].y + 2), CV_RGB (255, 0, 0));
      cvLine (img, cvPoint (pts[i].x + 2, pts[i].y - 2), cvPoint (pts[i].x - 2, pts[i].y + 2), CV_RGB (255, 0, 0));
      res[i] = 1;
    }
    else {
      if (pts[i].x > 200) {
        cvLine (img, cvPoint (pts[i].x - 2, pts[i].y - 2), cvPoint (pts[i].x + 2, pts[i].y + 2), CV_RGB (0, 255, 0));
        cvLine (img, cvPoint (pts[i].x + 2, pts[i].y - 2), cvPoint (pts[i].x - 2, pts[i].y + 2), CV_RGB (0, 255, 0));
        res[i] = 2;
      }
      else {
        cvLine (img, cvPoint (pts[i].x - 2, pts[i].y - 2), cvPoint (pts[i].x + 2, pts[i].y + 2), CV_RGB (0, 0, 255));
        cvLine (img, cvPoint (pts[i].x + 2, pts[i].y - 2), cvPoint (pts[i].x - 2, pts[i].y + 2), CV_RGB (0, 0, 255));
        res[i] = 3;
      }
    }
  }
 
 
  cvNamedWindow ("SVM", CV_WINDOW_AUTOSIZE);
  cvShowImage ("SVM", img);
  cvWaitKey (0);
 
 
  for (i = 0; i < s; i++) {
    data[i * 2] = float (pts[i].x) / size;
    data[i * 2 + 1] = float (pts[i].y) / size;
  }
  cvInitMatHeader (&data_mat, s, 2, CV_32FC1, data);
  cvInitMatHeader (&res_mat, s, 1, CV_32SC1, res);
  criteria = cvTermCriteria (CV_TERMCRIT_EPS, 1000, FLT_EPSILON);
  param = CvSVMParams (CvSVM::C_SVC, CvSVM::RBF, 10.0, 8.0, 1.0, 10.0, 0.5, 0.1, NULL, criteria);
 
 
  svm.train (&data_mat, &res_mat, NULL, NULL, param);
 
 
  for (i = 0; i < size; i++) {
    for (j = 0; j < size; j++) {
      CvMat m;
      float ret = 0.0;
      float a[] = { float (j) / size, float (i) / size };
      cvInitMatHeader (&m, 1, 2, CV_32FC1, a);
      ret = svm.predict (&m);
      switch ((int) ret) {
      case 1:
        rcolor = CV_RGB (100, 0, 0);
        break;
      case 2:
        rcolor = CV_RGB (0, 100, 0);
        break;
      case 3:
        rcolor = CV_RGB (0, 0, 100);
        break;
      }
      cvSet2D (img, i, j, rcolor);
    }
  }
 
 
  for (i = 0; i < s; i++) {
    CvScalar rcolor;
    switch (res[i]) {
    case 1:
      rcolor = CV_RGB (255, 0, 0);
      break;
    case 2:
      rcolor = CV_RGB (0, 255, 0);
      break;
    case 3:
      rcolor = CV_RGB (0, 0, 255);
      break;
    }
    cvLine (img, cvPoint (pts[i].x - 2, pts[i].y - 2), cvPoint (pts[i].x + 2, pts[i].y + 2), rcolor);
    cvLine (img, cvPoint (pts[i].x + 2, pts[i].y - 2), cvPoint (pts[i].x - 2, pts[i].y + 2), rcolor);
  }
 
 
  sv_num = svm.get_support_vector_count ();
  for (i = 0; i < sv_num; i++) {
    support = svm.get_support_vector (i);
    cvCircle (img, cvPoint ((int) (support[0] * size), (int) (support[1] * size)), 5, CV_RGB (200, 200, 200));
  }
 
  cvNamedWindow ("SVM", CV_WINDOW_AUTOSIZE);
  cvShowImage ("SVM", img);
  cvWaitKey (0);
 
  cvDestroyWindow ("SVM");
  cvReleaseImage (&img);
 
  return 0;
 
 
}
le .pro:
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
TEMPLATE = app
TARGET = test
QT += core \
    gui
 
DEPENDPATH += .
INCLUDEPATH += 	"C:\OpenCV2.1\src\ml" \
				"C:\OpenCV2.1\src\highgui" \
				"C:\OpenCV2.1\src\cxcore" \
				"C:\OpenCV2.1\src\cvaux\vs" \
				"C:\OpenCV2.1\src\cvaux" \
				"C:\OpenCV2.1\src\cv" \
				"C:\OpenCV2.1\include\opencv" \
				"C:\OpenCV2.1\lib"	
 
LIBS += -L"C:\OpenCV2.1\lib" -lcv210  -lcxcore210  -lhighgui210 -lcvaux210 -lml210
HEADERS += signature.h "C:\OpenCV2.1\include\opencv"
SOURCES += 	 main.cpp
CONFIG +=release
et j'ai eu ces erreur

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
release/main.o:main.cpp:(.text+0x57): undefined reference to `CvSVM::CvSVM()'
 
release/main.o:main.cpp:(.text+0x6d): undefined reference to `CvSVMParams::CvSVMParams()'
 
release/main.o:main.cpp:(.text+0x8d1): undefined reference to `CvSVMParams::CvSVMParams(int, int, double, double, double, double, double, double, CvMat*, CvTermCriteria)'
 
release/main.o:main.cpp:(.text+0x91f): undefined reference to `CvSVM::train(CvMat const*, CvMat const*, CvMat const*, CvMat const*, CvSVMParams)'
 
release/main.o:main.cpp:(.text+0xa87): undefined reference to `CvSVM::predict(CvMat const*, bool) const'
 
release/main.o:main.cpp:(.text+0xd4e): undefined reference to `CvSVM::get_support_vector_count() const'
 
release/main.o:main.cpp:(.text+0xd89): undefined reference to `CvSVM::get_support_vector(int) const'
 
release/main.o:main.cpp:(.text+0xedd): undefined reference to `CvSVM::~CvSVM()'
 
release/main.o:main.cpp:(.text+0xefb): undefined reference to `CvSVM::~CvSVM()'
 
collect2: ld returned 1 exit status
 
mingw32-make[1]: *** [release\test.exe] Error 1
 
mingw32-make: *** [release] Error 2
 
Le processus "C:/Qt/2010.05/mingw/bin/mingw32-make.exe" s'est terminé avec le code %2.
Erreur à la compilation du projet test (cible : Bureau)
Lors de l'exécution de l'étape 'Make'
je ne sais quelqu'un peut m'aider merci d'avence