OpenCV:打开Mobotix相机Feed

Rom*_*ain 6 c++ opencv

我有一台Mobotix相机.这是一台IP摄像头.在API中,它们为我们提供了获取Feed的可能性

HTTP:// [ 用户 ]:[ 密码 ] @ [ ip_adress ]:[ 端口?] /cgi-bin/faststream.jpg [ 选项 ]


我试过的是像普通网络摄像头一样打开它:

cv::VideoCapture capture("http://...");
cv::Mat frame;

if (capture.isOpened())
    // always false anyway.
while(1)
{
    capture.read(frame);
    cv::imshow("Hi there", frame);
    cv::waitkey(10);
}
Run Code Online (Sandbox Code Playgroud)

仅供参考:开发人员Mobotix API文档


编辑:现在感谢berak我只需要在选项中添加&data = v.mjpg:

?stream=full&fps=5.0&noaudio&data=v.mjpg
Run Code Online (Sandbox Code Playgroud)

请注意,在v.mjpg中,只有[dot] mjpg很重要,你也可以把myfile.mjpg.

现在问题是Feed更新的速度.我有2秒的延迟,加上进给非常慢.当我更改MxJPG或mxg的流选项时,我得到一个损坏的图像,其中字节没有正确排序.

编辑:我试图直接用mobotix控制中心更改摄像机参数,但只有分辨率影响我的OpenCV程序,而没有实际改变我访问图像的速度.

lxx*_*lxx 0

对于最大速度使用 fps=0 它在 api 文档中

就像是

http://cameraip/cgi-bin/faststream.jpg?stream=full&fps=0
Run Code Online (Sandbox Code Playgroud)

请参阅http://developer.mobotix.com/paks/help_cgi-image.html

faststream 是 mjpeg 流(用于图像捕获),请确保 mxpeg 已关闭并选择能够提供足够分辨率的最小图像。即使用 640 x 480 让它工作(将其设置为相机 webgui),然后增加图像大小。

请注意,这是用于图像捕获而不是视频,您需要检测每个 jpeg 的开头和结尾,然后从接收缓冲区复制到内存中。

vlc 可以处理 mxpeg ,但需要从命令行使用 vlc --ffmpeg-format=mxg 启动或在 GUI 中设置编辑选项 ffmpeg-format=mxg ,请参阅https://wiki.videolan.org/MxPEG