Afficher plusieurs caméras simultanément avec opencv?
J'ai deux caméras que j'ai besoin d'afficher de la vidéo à partir en même temps, que ce soit dans des fenêtres séparées ou dans la même fenêtre. Cependant, en utilisant le code suivant, un seul des caméras (caméra(1)) s'affiche. Quelqu'un pourrait-il point de ce qui doit être changé dans mon code, ou un lien vers un autre code qui permettrait d'atteindre l'effet désiré?
N. B. Ce n'est PAS pour la vision stéréo.
int main()
{
//initialize and allocate memory to load the video stream from camera
CvCapture *capture1 = cvCaptureFromCAM(0);
if( !capture1 ) return 1;
//create a window with the title "Video1"
cvNamedWindow("Video1");
while(true) {
//grab and retrieve each frames of the video sequentially
IplImage* frame1 = cvQueryFrame( capture1 );
if( !frame1 ) break;
//show the retrieved frame in the "Video1" window
cvShowImage( "Video1", frame1 );
//wait for 40 milliseconds
int c = cvWaitKey(40);
//exit the loop if user press "Esc" key (ASCII value of "Esc" is 27)
if((char)c==27 ) break;
}
//initialize and allocate memory to load the video stream from camera
CvCapture *capture2 = cvCaptureFromCAM(1);
if( !capture2 ) return 1;
//create a window with the title "Video2"
cvNamedWindow("Video2");
while(true) {
//grab and retrieve each frames of the video sequentially
IplImage* frame2 = cvQueryFrame( capture2 );
if( !frame2 ) break;
//show the retrieved frame in the "Video2" window
cvShowImage( "Video2", frame2 );
//wait for 40 milliseconds
int c = cvWaitKey(40);
//exit the loop if user press "Esc" key (ASCII value of "Esc" is 27)
if((char)c==27 ) break;
}
//destroy the opened window
cvDestroyWindow("Video1");
cvDestroyWindow("Video2");
//release memory
cvReleaseCapture( &capture1 );
cvReleaseCapture( &capture2 );
return 0;
//VideoCapture1();
//VideoCapture2();
}
La deuxième boucle n'est jamais exécuté parce que le programme reste bloqué dans le while(true) de la première boucle. Vous aussi marqué, c++, mais ne sont pas à l'aide de c++ approprié interfaces. Vous utilisez cvFunction() à la place de cv::fonction() et à l'aide obsolètes IplImage les structures plutôt que Mat.
OriginalL'auteur JM92 | 2012-12-18
Vous devez vous connecter pour publier un commentaire.
Juste pour clarifier, êtes-vous à l'aide de C ou C++? Si vous êtes à l'aide de C++, veuillez utiliser le C++ interfaces de OpenCV.
Exemple ci-dessous fonctionne pour moi:
le problème semble être lié à la bande passante du bus USB, Si je brancher les caméras à deux concentrateurs USB racine, il fonctionne très bien. voir: stackoverflow.com/questions/11222813/...
Il est intéressant de voir le résultat, je vous remercie pour l'information.
Oui// connecter la caméra avec deux port USB différent.
OriginalL'auteur brotherofken
Essayez ceci:
vous devez utiliser la dernière interface C++, il y a des questions dans la vidéo précédente pilotes dans OpenCV, cela est également lié à votre système d'exploitation et votre type de caméra.
OriginalL'auteur tomriddle_1234
placer la déclaration de image1 et image2 en dehors de la boucle while
J'ai eu le même problème de la création d'une WebCam de classe.
A bien fonctionné pour une seule instance à la déclaration de l'image et de la capture à l'intérieur
mais plusieurs instances nécessaires au constructeur d'être passé
à la fois le cadre et la capture des pointeurs.
openCV apparemment ne peut pas multi-thread certains équipements importants
BTW, avec X11, pour obtenir le multi-threading pour travailler avec cvWaitKey() vous en avez besoin
le lien dans libX11..6
et appel XInitThreads(); la première instruction dans main()
espérons que cette aide
Dave laine.
OriginalL'auteur david n laine