我正在使用EmguCV从磁盘上存储的视频文件创建捕获。我设置框架位置的捕获属性,然后执行QueryFrame。在视频的某些帧上,当我进一步处理Mat时,出现错误“{“OpenCV:无法识别或不受支持的数组类型”}“。并非在视频的所有帧上都发生这种情况,但是当我为同一视频运行它时,它在视频中的相同帧上发生。如果我将Mat保存到磁盘,则图像看起来可以很好地保存,并且没有错误。这是用于加载和处理图像的代码:
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;
}
}
}
在进一步处理中引发异常的代码行
var r = _classifier.DetectMultiScale(matIn, 1.1, 2, new Size(200, 200), new Size(375, 375));
就像我说的那样,视频的每一帧都不会失败。
我正在尝试解决此问题,因为有时它会跳过1帧,但有时它会跳过整个帧,这使我错过了视频中的重要事件。
最佳答案
经过更多的工作后,我发现在进入级联分类器之前,Mat已设置了ROI。在垫失败的情况下,ROI设置为0高度和0宽度。这引起了问题。
关于opencv - EmguCV 3.1 Capture.QueryFrame间歇性返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41593829/