【问题标题】:EmguCV 3.1 Capture.QueryFrame returning error intermittantlyEmguCV 3.1 Capture.QueryFrame 间歇性返回错误
【发布时间】: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 帧,但有时它会跳过整个帧块,这导致我错过了视频中的重要事件。

【问题讨论】:

    标签: opencv emgucv opencv3.1


    【解决方案1】:

    在进行了更多工作之后,我发现 Mat 在进入级联分类器之前设置了 ROI。在垫子失败的情况下,ROI 设置为 0 高度和 0 宽度。这导致了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      相关资源
      最近更新 更多