与IP Camera连接后C#-Application挂起

时间:2014-02-11 04:40:40

标签: c# opencv emgucv

我正在开发一个使用网络摄像头和IpCamera显示视频的应用程序。 对于IpCamera,它会在某个时间显示视频流,但之后会停止流式传输和应用程序挂起。

我正在使用Emgu.CV Library抓取帧并在图片控件中显示它。

我已使用函数QueryFrame()尝试使用以下代码显示视频。

用于连接IP相机 Capture capture = new Capture(URL);

用于抓取框架 Image<Bgr, Byte> ImageFrame = capture.QueryFrame();

一段时间后QueryFrame()提供null值并且应用程序挂起。

任何人都可以告诉我为什么会这样,以及我如何处理它?<​​/ p>

提前谢谢。

1 个答案:

答案 0 :(得分:2)

对于延迟感到抱歉,但我提供了一个适用于多个公共IP摄像机的示例。它需要EMGU引用替换为您当前的版本,目标构建目录应设置为“EMGU Version \ bin”或者将其提取到示例文件夹中。

http://sourceforge.net/projects/emguexample/files/Capture/CameraCapture%20Public%20IP.zip/download

它不使用旧的QueryFrame()方法,而是使用RetrieveBgrFrame()方法。它工作得相当好,我没有空例外。但是,如果你用这样的

替换ProcessFrame()方法
private void ProcessFrame(object sender, EventArgs arg)
{
    //If you want to access the image data the use the following method call
    //Image<Bgr, Byte> frame = new Image<Bgr,byte>(_capture.RetrieveBgrFrame().ToBitmap());

    if (RetrieveBgrFrame.Checked)
    {
        Image<Bgr, Byte> frame = _capture.RetrieveBgrFrame();
        //because we are using an autosize picturebox we need to do a thread safe update
        if(frame!=null) DisplayImage(frame.ToBitmap());
    }
    else if (RetrieveGrayFrame.Checked)
    {
        Image<Gray, Byte> frame = _capture.RetrieveGrayFrame();
        //because we are using an autosize picturebox we need to do a thread safe update
        if (frame != null) DisplayImage(frame.ToBitmap());
    }
}

干杯

克里斯