Problème de gestion de plusieurs caméras
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:
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 :
Code:
CvCapture *capture;
La fonction setIndex(i) :
Code:
1 2 3
| void Camera::setIndex(int i) {
capture = cvCreateCameraCapture(i);
} |
Et dans ma fonction ouvrirFenetre, il y a ceci :
Code:
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