Bonjour,
j'essaie d'utiliser le code de calcul des LBP disponible dans le fichier facerec.cpp d'Opencv
Précision : j'utilise un code en C
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 template <typename _Tp> static void olbp_(InputArray _src, OutputArray _dst) { // get matrices Mat src = _src.getMat(); // allocate memory for result _dst.create(src.rows-2, src.cols-2, CV_8UC1); Mat dst = _dst.getMat(); // zero the result matrix dst.setTo(0); // calculate patterns for(int i=1;i<src.rows-1;i++) { for(int j=1;j<src.cols-1;j++) { _Tp center = src.at<_Tp>(i,j); unsigned char code = 0; code |= (src.at<_Tp>(i-1,j-1) >= center) << 7; code |= (src.at<_Tp>(i-1,j) >= center) << 6; code |= (src.at<_Tp>(i-1,j+1) >= center) << 5; code |= (src.at<_Tp>(i,j+1) >= center) << 4; code |= (src.at<_Tp>(i+1,j+1) >= center) << 3; code |= (src.at<_Tp>(i+1,j) >= center) << 2; code |= (src.at<_Tp>(i+1,j-1) >= center) << 1; code |= (src.at<_Tp>(i,j-1) >= center) << 0; dst.at<unsigned char>(i-1,j-1) = code; } } }
Or lors de la compilation il y a une erreur avec le template (non reconnaissance du modèle)
J'ai donc enlevé la première ligne et j'ai remplacé tout les _Tp par "char"
Ensuite lors de la compilation j'obtenais "impossible de convertir IplImage en InputArray
J'essaie donc de convertir mes IplImage en mat de la manière suivante :
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 void olbp_(IplImage* _src,IplImage* filtre) { // get matrices Mat src(_src); // allocate memory for result Mat _dst; _dst.create(src.rows-2, src.cols-2, CV_8UC1); // zero the result matrix _dst.setTo(0); // calculate patterns for(int i=1;i<src.rows-1;i++) { for(int j=1;j<src.cols-1;j++) { char center = src.at<char>(i,j); unsigned char code = 0; code |= (src.at<char>(i-1,j-1) >= center) << 7; code |= (src.at<char>(i-1,j) >= center) << 6; code |= (src.at<char>(i-1,j+1) >= center) << 5; code |= (src.at<char>(i,j+1) >= center) << 4; code |= (src.at<char>(i+1,j+1) >= center) << 3; code |= (src.at<char>(i+1,j) >= center) << 2; code |= (src.at<char>(i+1,j-1) >= center) << 1; code |= (src.at<char>(i,j-1) >= center) << 0; _dst.at<unsigned char>(i-1,j-1) = code; } } filtre = cvCreateImage(cvSize(_dst.cols,_dst.rows),8,1); IplImage ipltemp=_dst; cvCopy(&ipltemp,filtre); }
Ce qui ne fonctionne pas : le code compile mais lorsque j'essai d'afficher la sortie "filtre" il ne se passe rien ...
Quelqu'un peut il m'expliquer ces différentes erreurs ?
Cordialement,
A.
Partager