EMGU QueryFrame通过RTSP返回“条纹”图像

时间:2013-08-16 15:06:25

标签: c# opencv rtsp emgucv

我有一个高清网络摄像头,我试图通过rtsp抓取帧并使用以下代码:

//in Form_Load
Application.Idle += getNextFrame;

事件处理程序:

private void getNextFrame(object sender, EventArgs ags)
{
        //where _imgCount is the total image Grabs
        lbl_Count.Text = _imgCount++.ToString(); 
        // and ibLive is a Emgu ImageBox
        ibLive.Image = capAxis.QueryFrame().Resize(640, 480, INTER.CV_INTER_AREA);
}

当我启动程序时,它会在屏幕底部出现“条纹”之前抓取20-40帧。它始终位于图像的底部,但有时会占据屏幕的一半。

enter image description here

流分辨率是1920x1080,它使用的是mjpeg。我尝试切换到h.264,但结果相同。

我正在使用Emgu版本x86-2.4.0.1717

任何想法? 感谢。

3 个答案:

答案 0 :(得分:2)

我知道这是一个老问题,但我最近遇到了同样的问题。 我建议使用另一个流媒体库。例如

如果您确实需要使用EMGU进行流式处理,请创建分辨率较低或压缩率较高的流配置文件。我将压缩设置为30并使用相同的分辨率,然后在rtsp网址中提供流配置文件名称。 (假设您正在使用像我这样的Axis相机capAxis

Capture cap = new Capture(@"rtsp://10.0.0.1/axis-media/media.amp?videocodec=h264&streamprofile=rtspstream");

答案 1 :(得分:1)

我有同样的问题,我自己解决了。我用iSpy知道我的ONVIF Ip相机的网址。我的IP Camera的网址是rtsp://192.168.1.xxx:554 // user = admin_password = tlJwpbo6_channel = 1_stream = 0.sdp?real_stream 对于stream = 0,我的IP Cam以高清分辨率(1280 x 720)运行,并且该分辨率会使我的图像产生条纹效果。因此,iSpy提供了两种URL选项,另一种只是流中的不同。我改变了stream = 1的低分辨率(352 x 288),图像结果很好!我的形象中没有任何条纹。我从这个问题中学到的东西是使用RTSP,你必须以低分辨率使用它。高分辨率会使图像效果不佳。希望它可以帮助你解决问题。

此致 Alfonsus Dhani

答案 2 :(得分:1)

在Capture字符串结尾处添加此"?tcp"

Capture cap = new Capture(@"rtsp://10.0.0.1/axis-media/media.amp?videocodec=h264&streamprofile=rtspstream?tcp");

修改

这是我的代码,是的,它有效,我正在使用IP cam DAHUA。

Capture cap = Capture(@"rtsp://admin:12345@10.0.0.01:554/cam/realmonitor?channel=1&subtype=01?tcp");