2017-01-11 4 views
0

Ich verwende EmguCV, um eine Aufnahme aus einer Videodatei auf der Festplatte zu erstellen. Ich habe die Capture-Eigenschaft für die Frame-Position festgelegt und dann einen QueryFrame ausgeführt. Bei bestimmten Frames aus dem Video erhalte ich den Fehler "{" OpenCV: Unbekannter oder nicht unterstützter Array-Typ "}". Dies passiert nicht bei allen Frames des Videos, aber wenn ich es für dasselbe Video starte, passiert es für die gleichen Frames im Video. Wenn ich die Matte auf Festplatte speichere, sieht das Bild einwandfrei aus und speichert ohne Fehler. Hier ist der Code für das Laden und Verarbeiten des Bildes:EmguCV 3.1 Capture.QueryFrame Fehler intermittierend

Capture cap = new Capture(movieLocation); 
int framePos = 0; 

while (reading) 
{ 
    cap.SetCaptureProperty(CapProp.PosFrames, framePos); 
    using (var frame = cap.QueryFrame()) 
    { 
     if (frame != null) 
     { 
      try 
      { 
       var fm = Rotate(frame); // Works fine 
       // Other Processing including classifier.DetectMultiScale -- Error occurs here 
       frameMap.Add(framePos, r); 
      } 
      catch (Exception ex) 
      { 
       var s = ""; // Done to just see the error 
      } 
      framePos = framePos + 2; 

     } 
     else 
     { 
      reading = false; 
     } 
    } 
} 

Codezeile, die Ausnahme bei der weiteren Verarbeitung führt

var r = _classifier.DetectMultiScale(matIn, 1.1, 2, new Size(200, 200), new Size(375, 375)); 

Wie gesagt, dies scheitert nicht für jeden Frame des Videos.

Ich versuche, das zu lösen, weil es manchmal 1 Frame überspringt, aber zu anderen Zeiten ganze Framesblöcke überspringt, was mich dazu bringt, wichtige Ereignisse im Video zu verpassen.

Antwort

1

Nachdem ich ein bisschen mehr daran gearbeitet habe, habe ich herausgefunden, dass der Mat ROI hat, bevor ich zum Kaskadenklassifikator gehe. In den Fällen, in denen die Matte versagte, wurde die ROI auf 0 Höhe und 0 Breite eingestellt. Dies verursachte das Problem.