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