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 :
Alors que j'ai trois caméras connectées, le programme ne lance que deux instances de ma classe Camera...
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(); } }
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 CvCapture *capture;
Et dans ma fonction ouvrirFenetre, il y a ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 void Camera::setIndex(int i) { capture = cvCreateCameraCapture(i); }
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é).
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);
Sauriez-vous d'où cela pourrait venir, ainsi que comment le résoudre ?
Merci d'avance,
Benoît
Partager