Impossible de lire des images à partir de VideoCapture secondaire webcam avec OpenCV

Code:

Exemple Simple qui fonctionne parfaitement avec primaire webcam (périphérique 0):

VideoCapture cap(0);

if (!cap.isOpened()) {
     std::cout << "Unable to read stream from specified device." << std::endl;
     return;
}

while (true)
{
    //retrieve the frame:
    Mat frame;
    if (!cap.read(frame)) {
        std::cout << "Unable to retrieve frame from video stream." << std::endl;
        break;
    }
    //display it:
    imshow("MyVideo", frame);

    //check if Esc has been pressed:
    if (waitKey(1) == 27) {
        break;
    }
    //else continue:
}

cap.release();

Problème:

J'ai une deuxième webcam, que je voudrais utiliser. Cependant, lorsque je remplace VideoCapture cap(0); avec VideoCapture cap(1);, le flux est ouvert correctement (ou au moins cap.isOpened() retourne true) mais la cap.read(frame) appel renvoie false et je suis incapable de savoir pourquoi.

Ce que j'ai essayé:

  • J'ai essayé de jouer avec VideoCapture'paramètres un peu comme appeler:

    cap.set(CV_CAP_PROP_FORMAT, CV_8UC3);

    et aléatoire des trucs comme ça, mais rien ne semble aider.

  • J'ai aussi trouvé ceci: VideoCapture::échec de lecture sur la vidéo non compressée (Bogue #2281), qui semble être résolu sur la version 2.4.7.. mais j'ai juste mis à jour OpenCV pour 2.4.8 et cela ne fonctionne toujours pas...

  • J'ai essayé d'utiliser le AMCap pour capturer la vidéo brute provenant de cette caméra, l'enregistrer en tant que aaa.avi fichier et construit VideoCapture en appelant le:

    VideoCapture cap("aaa.avi");

    et il fonctionne (lors de la lecture de fichier)... ce que j'ai besoin est un traitement en temps réel avec le live-view.

HARDWARE, OS, SW détails:

Mon HW: HP ProBook 4510s avec webcam intégrée qui fonctionne toujours parfaitement

+ webcam externe CANYON CNR-FWCII3, référencé par l'OS comme "USB Video Device" (le gênants un)
OS, SW: Windows 8.1 Pro x86, Visual Studio 2012 Pro, OpenCV 2.4.8 ~ à l'aide de vc11 construire

Questions:

  1. Suis-je raté quelque chose?
  2. Est-il autre chose que je pouvais faire?
  3. Est-il au moins quelque sorte comment faire pour récupérer quelques informations supplémentaires à propos de ce que le problème pourrait être en réalité?

... OpenCV l'API semble assez pauvre dans ce cas, et partout où les gens semblaient être confrontés au même problème, il y avait quelqu'un qui prétend être "OS /HW depnendant" comme une excuse.

Toute aide sera appréciée.

Êtes-vous sûr que rien n'est actuellement à l'aide de l'appareil 1 lorsque vous essayez de lire? Peut-être encore en cours d'exécution instance précédente de votre programme? (Cela semble stupide, mais il m'est arrivé!)
Oui, j'en suis sûr. Le truc, c'est... au lieu de deviner les causes possibles, il serait bien si il y a un moyen d'obtenir plus d'infos.
On pourrait appeler de la pac.get(i) et d'imprimer les différentes propriétés. Que serait vous donner quelques infos, voir ici
Par curiosité j'ai essayé de savoir si read échoue toujours et j'ai trouvé que c'est seulement le premier appel qui ne parvient pas -_-
Intéressant, c'est peut-être le choix du moment opportun? Comme dans la photo n'est pas prêt à saisir pour quelques ms? Qu'advient-il si vous le sommeil ou la boucle à travers un large éventail avant de la première capture?

OriginalL'auteur LihO | 2014-02-25