Bonjour à tous,
J'ai un problème lorsque j'essaie de récupérer le flux de ma deuxième webcam (celle non intégrée au portable) ainsi qu'avec ma caméra branchée en FireWire. Je suppose que je ne donne pas le bon argument à cvCaptureFromCAM ou cvCreateCameraCapture (aucune des deux ne marche) mais j'ai testé tous les chiffres de 0 à 9, seul 0 marche et donne la webcam intégrée à l'écran du portable. Enfin j'utilise C_CAP_V4L comme conseillé ici et cela ne marche que pour la caméra 200 (qui est en fait l'équivalent de 0).
Je précise que mes trois caméras (webcam intégrée, webcam externe et caméra firewire sont toutes les trois détectées et renvoient toutes une image (les deux premières avec easyCam 2 et la troisième avec Kino).
Voici tout mon code (de test) :
Je ne sais pas comment afficher précisément l'erreur, si quelqu'un le sait, je veux bien!
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 #include <opencv/cv.h> #include <opencv/highgui.h> #include <iostream> using namespace std; int main() { IplImage* img; int indexUsb0 = 0 + CV_CAP_V4L, indexUsb1 = 1 + CV_CAP_V4L, indexFireWire = 0 + CV_CAP_IEEE1394 ; cout << "Index premiere cam usb : " << indexUsb0 << endl; cout << "Index deuxieme cam usb : " << indexUsb1 << endl; cout << "Index cam firewire : " << indexFireWire << endl; char key = ' '; CvCapture* capture = cvCreateCameraCapture(indexUsb0); CvCapture* capture1 = cvCaptureFromCAM(indexUsb1); if(!capture) { cout << "Probleme de capture de la cam avec cvCreateCameraCapture" << endl; //il n'y a pas d'erreur ici //return 10; } if(!capture1) { cout << "Probleme de capture de la cam avec cvCaptureFromCAM." << endl; //Par contre ici il y en a une! return 10; } cvNamedWindow("video", CV_WINDOW_AUTOSIZE); img = cvQueryFrame(capture); if(!img) return 20; while(key!='q') { cvShowImage("video",img); img = cvQueryFrame(capture); if(!img) key = 'q'; int flip=0; if(img->origin!=IPL_ORIGIN_TL) { flip=CV_CVTIMG_FLIP; } //cvConvertImage(img,img_nvg,flip); //cvThreshold(img_nvg, img_bin, 100, 255, CV_THRESH_BINARY); key = cvWaitKey(35); } cvDestroyAllWindows(); img = NULL; cvReleaseCapture(&capture); return 0; }
Une piste?
Une autre piste (sur le todo d'opencv 1.0) ?:I'm using Linux and after
> some searching the web found a reference to a limitation of V4L/V4L2 that
> requires the webcams to be on separate USB host ports.
Ils souhaitaient ajouter la sélection de caméra, cela veut dire qu'au moins à la version 1.0 elle n'était pas disponible. Peut être ne l'est elle toujours pas à la 1.1... Ça me parait étonnant parceque certains utilisent de multiples caméras pour la capture en 3D mais bon (peut être avec cvcam sous windows).The proposed variant:
highgui like interface (i.e. no callbacks),
extended with some cvcam features like customization dialogs,
resolution changes, camera selection etc.),
Des précisions sur mon environnement :
OS : Ubuntu 8.10 / Gnome
Machine : Asus A6T (avec webcam intégrée)
IDE : Code:::Blocks 8.02 (compilateur GNU GCC)
Webcam : Logitech, Inc. QuickCam Express Plus (installée et testée avec EasyCam2)
Caméra FW : Sony digital handy cam? (testée avec Kino)
Partager