Nicht für das Lesen von frames aus Videoergreifung von sekundären webcam mit OpenCV

Code:

Einfaches Beispiel, das funktioniert perfekt mit primären webcam - (Gerät 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();

Problem:

Habe ich eine zweite webcam, die ich gerne verwenden würde. Allerdings, wenn ich ersetzen VideoCapture cap(0); mit VideoCapture cap(1);, der stream wird korrekt geöffnet (oder zumindest cap.isOpened() zurück true) aber die cap.read(frame) rufen Sie zurück false und ich bin nicht in der Lage, um herauszufinden, warum.

, Was ich versucht habe:

  • Ich habe versucht, zu spielen mit VideoCapture's Einstellungen ein bisschen wie aufrufen von:

    cap.set(CV_CAP_PROP_FORMAT, CV_8UC3);

    - und random-Zeug, aber nichts scheint zu helfen.

  • Habe ich auch gefunden: Videoergreifung::Lesen, schlägt fehl, Unkomprimiertes video (Bug #2281), das scheint gelöst zu sein auf die version 2.4.7.. aber ich habe soeben OpenCV, um 2.4.8, und es funktioniert immer noch nicht...

  • Ich habe versucht, zu verwenden der AMCap, um capture die raw-video von dieser Kamera, speichern Sie es als aaa.avi - Datei und konstruiert VideoCapture durch aufrufen:

    VideoCapture cap("aaa.avi");

    und es funktioniert (beim Lesen aus Datei)... was ich brauche ist die Verarbeitung in Echtzeit mit live-view aber.

HW, OS, SW details:

Meine HW: HP ProBook 4510s mit eingebauter webcam, die immer perfekt funktioniert

+ externe webcam CANYON CNR-FWCII3, verwiesen vom Betriebssystem als "USB Video Device" (das lästige ein)
OS, SW: Windows 8.1 Pro x86, Visual Studio 2012 Pro, OpenCV 2.4.8 ~ mit vc11 bauen

Fragen:

  1. Bin ich etwas fehlt?
  2. Gibt es sonst noch etwas, dass ich tun könnte?
  3. Gibt es zumindest irgendeine Möglichkeit, wie man abrufen, einige zusätzliche Informationen über das, was könnte das problem sein?

... OpenCV API scheint ziemlich schlecht in diesem Fall und überall dort, wo die Menschen Schienen vor dem ähnlichen Problem, da war jemand behaupten, dass es "OS /HW depnendant" als Ausrede.

Jede Hilfe wird geschätzt.

  • Sind Sie sicher, dass nichts ist derzeit mit Gerät 1, wenn Sie versuchen zu Lesen? Vielleicht eines noch Laufenden vorherigen Instanz des Programms? (Klingt dumm, aber es ist mir passiert!)
  • Ja, da bin ich sicher. Die Sache ist... statt zu raten, mögliche Ursachen, es wäre schön, wenn es einen Weg gibt, wie man mehr info aus ihm heraus.
  • Sie nennen konnte, cap.get(i), und drucken Sie die verschiedenen Eigenschaften. Das würde Ihnen einige info siehe hier
  • Aus Neugier habe ich versucht, ob read schlägt immer fehl und ich fand heraus, dass es ist nur der erste Anruf, dass nicht -_-
  • Interessant, vielleicht ist es das timing basiert? Wie in der Kamera ist nicht aufnahmebereit für ein paar ms? Was passiert, wenn Sie schlafen oder in einer Schleife durch ein großes array vor dem ersten erfassen?
  • Ja, du hast Recht. Zu schlafen, den aktuellen thread für 1 sec direkt nach der VideoCapture konstruiert wird, ergibt die gleiche, es funktioniert.
  • gut zu wissen! eine der vielen Macken von opencv denke ich

InformationsquelleAutor LihO | 2014-02-25
Schreibe einen Kommentar