【问题标题】:Frames not updating in loop帧不循环更新
【发布时间】:2012-07-29 01:48:34
【问题描述】:

这是我的相关代码:

在表单的加载方法中:

Application.Idle += new EventHandler(delegate(object s, EventArgs ea)
{
    if (!recording)
    {
        currentFrame = getFrame();
        ib.Image = currentFrame;
    }
    else
    {
        ib.Image = recFrame;
    }
    });

按下按钮(ib 是表单上的 ImageBox):

Measurements measurements = new Measurements();
String name = txtSampleName.Text;
ib.Image = recFrame;
stopwatch.Start();
recording = true;
while ((count = (int)Math.Floor(stopwatch.ElapsedMilliseconds/(double)1000)) < finalTime)
{
    currentFrame = getFrame();        
    Measurement currentMeasurement = new Measurement(name, currentFrame);
    measurements.add(currentMeasurement);
}
recording = false;
stopwatch.Stop();
measurements.write(txtDirectory.Text);

问题在于框架实际上并未更新。 currentFrame 采用循环开始之前帧的值。 recFrame 在 ib.Image 中不可见 - ib 只是在循环期间挂起 - 并且没有像应有的那样填充 recFrame)。 currentMeasurement 按原样添加到测量列表中,但其中的帧不是来自相机的当前帧。下面是来自 getFrame() 的代码摘要,它要么不返回当前时间来自网络摄像头的内容,要么不返回当前帧的旧值:

private Image<Bgr, Byte> getFrame()
{
    // get the frame
    Image<Bgr, Byte> frame = capture.QueryFrame();

    // draw some stuff on top of the frame
    // ...

    // return
    return frame;
}

我是否需要添加某种延迟来等待某事完成?我试过放入一个 Thread.Sleep 并没有任何帮助。我不明白问题是什么,所以一直无法寻找一个明智的解决方案。当我稍后将测量中的帧导出到 AVI 文件时,所有帧在循环开始之前都具有 currentFrame 的值,并且不会更改。

有什么想法吗?

非常感谢,

弗罗斯科伊。

编辑:在 currentMeasurement = new Measurement(name,currentFrame) 行上使用 currentFrame.Copy() 意味着当前捕获的帧实际上已放入列表中,然后写入 AVI 文件。我不明白为什么?还有,在ib中recFrame还是没有显示,所以我也不明白这里是怎么回事?

【问题讨论】:

    标签: c# emgucv


    【解决方案1】:

    在你的 while 循环中尝试 DoEvents 调用

    while ((count = (int)Math.Floor(stopwatch.ElapsedMilliseconds/(double)1000)) < finalTime) 
    { 
        currentFrame = getFrame(); 
        ib.Image = currentFrame; 
    Application.DoEvents();               
        Measurement currentMeasurement = new Measurement(name, currentFrame); 
        measurements.add(currentMeasurement); 
    } 
    

    【讨论】:

    • 您好,如果您在 Windows 窗体应用程序下,最好使用 Backgroundworker 来更新您的 GUI ;-)
    猜你喜欢
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多