Bonjour à tous,

Je tente d'accéder à plusieurs flux vidéos venant de webcams différentes (j'ai créé une classe permettant la gestion des caméras, une instance par caméra).

Voici mon code qui détermine le nombre d'instances à créer :

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
    int i;
    bool cam=true;
 
    for(i=0;cam;i++) {
        CvCapture *capture;
        capture = cvCreateCameraCapture(i);
        IplImage *image  = cvQueryFrame(capture);
        if(image) {
            if(image->width==0 || image->height==0) {
                cam=false;
            }
        }
        else
            cam=false;
    }
 
    if(i>0) {
        camera = new Camera[i];
 
        for(int j=0;j<i;j++) {
            camera[j].setIndex(j);
            camera[j].ouvrirFenetre();
            camera[j].show();
        }
    }
Alors que j'ai trois caméras connectées, le programme ne lance que deux instances de ma classe Camera...

J'ai, dans le header de ma classe caméra, la ligne suivante :
La fonction setIndex(i) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
void Camera::setIndex(int i) {
    capture = cvCreateCameraCapture(i);
}
Et dans ma fonction ouvrirFenetre, il y a 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
    IplImage *img; //déclaration d'un pointeur vers une structure IplImage (OpenCV)
 
    if(cvGrabFrame(capture)) {
        img = cvRetrieveFrame(capture);
    }
    else {
        img=cvLoadImage("tourte_epinard.jpg");
    }
 
   // img = cvQueryFrame(captureTmp);
    IplImage *img_nvg=cvCreateImage(cvGetSize(img), img->depth, img->nChannels); //création d'une image (OpenCV) qui contiendra l'image en niveaux de gris
 
    //On vérifie l'origine de l'image
    //Si elle n'est pas en haut à gauche, il faut la corriger
    int flip=0;
    if(img->origin!=IPL_ORIGIN_TL)
    {
        flip=CV_CVTIMG_FLIP;
    }
 
    //Conversion en niveaux de gris
    cvConvertImage(img, img_nvg, flip);
La première des deux caméras détectées renvoie une image entièrement verte, et l'autre l'image tourte_epinard.jpg (preuve que le cvGrabFrame a échoué).

Sauriez-vous d'où cela pourrait venir, ainsi que comment le résoudre ?

Merci d'avance,
Benoît