2017-01-11 1 views
0

EmguCVを使用して、ディスクに保存されたビデオファイルからキャプチャを作成しています。フレーム位置のキャプチャプロパティを設定してから、QueryFrameを実行します。ビデオの特定のフレームで、さらにマットを処理するとエラー '{"OpenCV:Unrecognized or unsupported array type"} "が表示されます。これはビデオのすべてのフレームで発生するわけではありませんが、同じビデオに対して実行すると、ビデオの同じフレームで発生します。マットをディスクに保存すると、イメージは完全にうまく見え、エラーなく保存されます。ここで読み込み、画像を処理するためのコードです:EmguCV 3.1 Capture.QueryFrameが断続的にエラーを返す

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

私が言ったように、さらに処理中に例外をスローするコードの

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; 
     } 
    } 
} 

ラインは、これは、ビデオのフレームごとに失敗しません。

私はこの問題を解決しようとしていますが、時には1フレームをスキップしますが、それ以外の場合はフレーム全体をスキップしてビデオの重要なイベントを逃してしまいます。

答えて

1

もう少し作業を重ねると、カスケード分類器に行く前にマットにROIが設定されていることが分かりました。マットが故障した場合、ROIは0の高さと0の幅に設定されました。これにより問題が発生しました。

関連する問題