我在Windows下使用openCV 1.1pre1.我有一个网络摄像头,我需要从openCV抓取帧.该摄像机可以通过RTSP或mjpeg通过http传输标准mpeg4流.我已经看到很多线程都在谈论将ffmpeg与openCV一起使用,但我无法使其工作.
如何使用openCV从IP摄像头抓取帧?
谢谢
安德里亚
我正在尝试执行以下操作:使用gstreamer接收视频流并使用opencv进行处理.我找到了一些解决方案,其中一个是将视频写入(来自gstreamer)fifo,然后使用opencv读取它.(OPTION3这里是MJPEG流媒体和解码).问题是我无法打开管道.cvCreateFileCapture永远不会返回.这是我写的部分代码:
if(mkfifo("fifo.avi", S_IRUSR| S_IWUSR) == -1)
{
cout<<"Cant create fifo"<<endl;
cout<<errno<<endl;
}
loop = g_main_loop_new(NULL, false);
fsink = gst_element_factory_make("filesink", "fsink");
g_object_set(G_OBJECT(fsink), "location", "fifo.avi", NULL);
playbin = gst_element_factory_make("playbin2", "play");
g_object_set(G_OBJECT(playbin), "uri", uri.c_str(), NULL);
g_object_set(G_OBJECT(playbin), "video-sink", fsink, NULL);
bus = gst_pipeline_get_bus(GST_PIPELINE(playbin));
gst_bus_add_signal_watch(bus);
g_signal_connect(bus, "message::buffering", G_CALLBACK(&set_playbin_state), playbin);
gst_object_unref(bus);
cvNamedWindow("output", CV_WINDOW_AUTOSIZE);
capture = cvCreateFileCapture("fifo.avi");
Run Code Online (Sandbox Code Playgroud)
程序堆叠在最后一行.PS:我正在使用opencv 2.3.1.
我使用gstreamer从IP摄像机(如Axis)播放RTSP流.我使用如下命令行:
gst-launch-0.10 rtspsrc location=rtsp://192.168.0.127/axis-media/media.amp latency=0 ! decodebin ! autovideosink
Run Code Online (Sandbox Code Playgroud)
它工作正常.
我想用pygtk中的gui控制它,所以我使用gstreamer python绑定.我写了这段代码:
[...]
self.player = gst.Pipeline("player")
source = gst.element_factory_make("rtspsrc", "source")
source.set_property("location", "rtsp://192.168.0.127/axis-media/media.amp")
decoder = gst.element_factory_make("decodebin", "decoder")
sink = gst.element_factory_make("autovideosink", "sink")
self.player.add(source, decoder, sink)
gst.element_link_many(source, decoder, sink)
bus = self.player.get_bus()
bus.add_signal_watch()
bus.enable_sync_message_emission()
bus.connect("message", self.on_message)
bus.connect("sync-message::element", self.on_sync_message)
[...]
Run Code Online (Sandbox Code Playgroud)
但它不起作用并退出此消息:
gst.element_link_many(source, decoder,sink)
gst.LinkError: failed to link source with decoder
Run Code Online (Sandbox Code Playgroud)
我也尝试用这个来改进我的CLI,因为我只使用h264:
gst-launch-0.10 -v rtspsrc location=rtsp://192.168.0.127/axis-media/media.amp ! rtph264depay ! ffdec_h264 ! xvimagesink
Run Code Online (Sandbox Code Playgroud)
并在我的python代码中实现它:
[...]
self.player = gst.Pipeline("player")
source = gst.element_factory_make("rtspsrc", "source")
depay = gst.element_factory_make("rtph264depay", "depay") …Run Code Online (Sandbox Code Playgroud)