【问题标题】:How to use multiple USB webcam in Matlab working simultaneously?如何在 Matlab 中同时使用多个 USB 网络摄像头?
【发布时间】:2012-05-19 23:09:34
【问题描述】:

我想用两个 USB 网络摄像头 (Philips SPC 900NC) 拍摄实时视频,但我发现它们不能在我的笔记本电脑上同时工作。两个 USB 网络摄像头中的任何一个都可以单独工作,也可以与另一个网络摄像头(最初安装在我的笔记本电脑上)一起工作。

当我使用 simulink 块“来自视频设备”时,Matlab 给出了错误消息“多个 VIDEOINPUT 对象无法同时访问同一设备。”。然后我用命令“imaqhwinfo”检查了视频输入设备,只能检测到一个 USB 飞利浦网络摄像头。

我想知道,

  1. 出现这种情况的原因是什么?是因为硬件限制(USB 总线带宽)还是 matlab 视频对象不支持相同的多个视频设备?

  2. 解决办法是什么?谁能给我一些建议?

【问题讨论】:

    标签: matlab webcam


    【解决方案1】:

    您可能对此链接感兴趣:

    http://opencv.willowgarage.com/wiki/faq#How_to_use_2_cameras_.28multiple_cameras.29_with_cvCam_library

    其中包含:

    首先,初始化cvcam库,获取cams数量:

    int ncams = cvcamGetCamerasCount( );    //returns the number of available cameras in the system
    

    显示对话框以选择正在使用的相机

    int* out; int nselected = cvcamSelectCamera(&out);
    

    获取选定的凸轮并启用它们。

    int cam1 = out[0];
    int cam2 = out[1];
    
    cvcamSetProperty(cam1, CVCAM_PROP_ENABLE, CVCAMTRUE);
    cvcamSetProperty(cam1, CVCAM_PROP_RENDER, CVCAMTRUE);  //We'll render stream from this source
    cvNamedWindow("Cam1", 1);
    cvcamWindow MyWin1 = (cvcamWindow)cvGetWindowHandle("Cam1");
    cvcamSetProperty(cam1, CVCAM_PROP_WINDOW, &MyWin1);   // Selects a window for  video rendering
    //Same code for camera 2
    cvcamSetProperty(cam2, CVCAM_PROP_ENABLE, CVCAMTRUE);
    cvcamSetProperty(cam2, CVCAM_PROP_RENDER, CVCAMTRUE);
    cvNamedWindow("Cam2", 1);
    cvcamWindow MyWin2 = (cvcamWindow)cvGetWindowHandle("Cam2");
    cvcamSetProperty(cam2, CVCAM_PROP_WINDOW, &MyWin1);
    
    //If you want to open the property dialog for setting the video format parameters, uncomment this line
    //cvcamGetProperty(cam1, CVCAM_VIDEOFORMAT, NULL);
    //cvcamGetProperty(cam2, CVCAM_VIDEOFORMAT, NULL);
    

    启用立体模式(2 个摄像头同时工作)

    cvcamSetProperty(cam1, CVCAM_STEREO_CALLBACK , stereocallback); //stereocallback is the function running to process every frames
    
    cvcamInit();
    cvcamStart();
    
    //Your app is working
    while (1)
    {
         int key = cvWaitKey(5);
         if (key == 27) break;
    }
    cvcamStop( );
    cvcamExit( );
    

    在上述函数之外定义立体回调函数。

    void stereocallback(IplImage* image1, IplImage* image2) {
    
    //Process 2 images here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 2019-09-28
      • 2016-07-17
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多