6

我需要访问和读取从网络摄像机发送实时 MJPEG 素材的 http 流,以便对图像进行一些 opencv 图像处理。

我可以通过 VLC 访问相机的镜头,或者只需访问 chrome 或 firefox 中的 URL。但是,当服务器只是发送连续提要时,我如何以编程方式访问 http 服务器并分隔每个帧?

数据似乎被简单地格式化,在 HTTP Header 和 JPEG 数据之间循环。我能想到的唯一方法是以某种方式向服务器发送请求,解析传入的数据,并将标头与实际的 jpeg 数据分开,然后将其传递给 opencv。

但是,这听起来非常令人费解,我不太确定从哪里开始。你们知道那里是否有任何图书馆,或者只是我忽略的一种更简单的方法,可以让这一切变得更容易吗?

非常感谢

4

2 回答 2

7

对于 HTTP 下载,您可以使用Libcurl库。

AFAIK MJPEG 格式不是标准化格式。它的实际字节格式因实现而异。但基本上只是 jpeg 文件与分隔符的连接。如果您使用十六进制编辑器查看字节,您可以轻松区分每个 jpeg 文件。

例如,ffmpeg 的 mjpeg 输出结构如下:

0xff 0xd8 // start of jpeg
{ ... }   // jpeg body
0xff 0xd9 // end of jpeg
...
0xff 0xd8 // start of jpeg
{ ... }   // jpeg body
0xff 0xd9 // end of jpeg
...
于 2011-01-26T07:36:32.077 回答
1

在此页面中:

http://thistleshrub.net/www/index.php?controller=posts&action=show&id=2012-05-13DisplayingStreamedMJPEGinJava.txt

用 Java 解析 MJPEG 流,我用 Java 完美地实现了这一点。

如果您尝试与 C++ 一起使用,您会发现缺少一些东西:套接字连接和渲染画布,libcurl 似乎是 http 请求的不错选择,但仍然缺少画布,您可以使用 GLUT 或 Qt 之类的东西。

我在一些论坛上读到 OpenCV 可以读取 MJPEG Streamer 类型的输入流,但似乎它们需要是最新版本的 OpenCV(从头开始编译 OpenCV 很难)。

我希望这会有所帮助。

于 2013-05-09T05:17:25.070 回答