Bonjour,

j'essaie d'utiliser le code de calcul des LBP disponible dans le fichier facerec.cpp d'Opencv


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;
        }
    }
}
Précision : j'utilise un code en C

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.