首页 文章

MATLAB - 捕获视频流(MJPEG,rtsp,mpeg)

提问于
浏览
11

有没有人在MATLAB中捕获来自IP摄像机的视频流?例如,从rtsp://10.10.10.10:554 / live.sdp(rtsp stream)或http://x.x.x.x/axis-cgi/mjpg/video.cgi(mjpeg流)中获取MATLAB中的帧 . MATLAB的Image Acquisition Toolbox目前不支持此功能 . 我找到了2个选项:1)使用mmread . 但是在64位MATLAB下不支持http流读取或2)编写我自己的C函数来抓取帧(我使用OpenCV库)然后将其编译成MATLAB MEX函数 . 任何建议表示赞赏 .

2 回答

  • 1

    这是我从MATLAB支持得到的答案:

    不幸的是,你是正确的,目前图像采集工具箱不支持IP摄像头 . 关于变通方法:1 . 如果mmread适合您,也许您可以在64位计算机上安装32位MATLAB . 2.编写自己的MEX驱动程序应该是一个可能的选择 . 3. IMREAD能够从IP摄像机获取帧 . 可以利用此功能并构建构建视频流的功能 . 虽然帧速率可能是一个问题 .

    我建议你实现自己的Matlab mex函数来抓取视频帧 . 以下是一些指示:

    • OpenCV库用于从网络摄像机捕获视频流,请参阅OpenCV with Network Cameras . 每个IP摄像机可以具有用于访问视频流的不同API(即URL地址) . 例如, http://10.10.10.10/axis-cgi/mjpg/video.cgi?resolution=800x600&.mjpg .

    • 以下是OpenCV库的matlab mex函数集合和开发工具包的链接(感谢Kota Yamaguchi):https://github.com/kyamagu/mexopencv . 该库可以轻松地在OpenCV数据类型和mxArray之间进行转换 . 这是一个例子:

    #include "mexopencv.hpp"
    void mexFunction( int nlhs, mxArray *plhs[],
                      int nrhs, const mxArray *prhs[] )
        {
        // Check arguments
        if (nlhs!=1 || nrhs!=1)
            mexErrMsgIdAndTxt("myfunc:invalidArgs", "Wrong number of arguments");
    
        // Convert MxArray to cv::Mat
        cv::Mat mat = MxArray(prhs[0]).toMat();
    
        // Do whatever you want
    
        // Convert cv::Mat back to mxArray*
        plhs[0] = MxArray(mat);
    }
    
  • 1

    从MATLAB R2015a开始,使用ipcam功能变得非常简单:

    cam = ipcam('http://172.28.17.193/video.mjpeg', 'admin', 'password');
    % preview the camera
    preview(cam);
    
    % close preview
    closepreview(cam);
    
    % Or get a snapshop...
    img = snapshot(cam);
    imshow(img);
    
    % release camera
    clear cam;
    

    第一次调用该函数时,MATLAB可能会提示您下载它 . 好消息是解决方案甚至不需要相机采集工具箱的许可证 .

相关问题