【发布时间】:2017-01-11 14:45:16
【问题描述】:
我正在使用 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 帧,但有时它会跳过整个帧块,这导致我错过了视频中的重要事件。
【问题讨论】: