Mac 上的 OpenCV 无法打开 USB 网络摄像头

vix*_*xo7 5 c++ macos webcam opencv

我在运行 Mac OS X v10.7 (Lion) 的MacBook Pro 中使用OpenCV的 VideoCapture.open(int) 从 USB 网络摄像头获取视频捕获失败。使用 open(0) 成功从 iSight 摄像头获取捕获。但我没有任何运气试图找到网络摄像头。

网络摄像头已安装并与Skypemacam驱动程序应用程序配合使用。

这是我正在使用的代码的一部分:

VideoCapture cap; 
for (int i = 1; i < 1500; i++) {
    if (cap.open(i))
    {
        cout << "Found camera %d\n" << i;
        break;
    }
}
if(!cap.isOpened()) {  // Check if we succeeded
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

如果我i用 0初始化,它会立即找到 iSight 摄像头。如果我i用 1初始化,那么当i= 500时它会再次找到 iSight 。

我该如何解决这个问题?

cyr*_*iel 2

尝试在没有此行的情况下运行您的代码:break;。您可能会发现不止一台相机,其中之一就是网络摄像头。
请注意, 的参数cap.open不仅是相机的数量 - 它还定义了您要使用的 API:

摄像机调度方式:index为摄像机编号。

  • 如果给定一个从 0 到 99 的索引,它会尝试找到第一个
  • 可以访问给定相机索引的 API。
  • 添加 100 的倍数来选择 API(来自 cap.cpp 的注释)

可能性(取自 highgui_c.h):

CV_CAP_ANY      =0,     // autodetect  
CV_CAP_MIL      =100,   // MIL proprietary drivers  
CV_CAP_VFW      =200,   // platform native  
CV_CAP_V4L      =200,
CV_CAP_V4L2     =200,  
CV_CAP_FIREWARE =300,   // IEEE 1394 drivers  
CV_CAP_FIREWIRE =300,  
CV_CAP_IEEE1394 =300,  
CV_CAP_DC1394   =300,  
CV_CAP_CMU1394  =300,  
CV_CAP_STEREO   =400,   // TYZX proprietary drivers  
CV_CAP_TYZX     =400,  
CV_TYZX_LEFT    =400,  
CV_TYZX_RIGHT   =401,  
CV_TYZX_COLOR   =402,  
CV_TYZX_Z       =403,  
CV_CAP_QT       =500,   // QuickTime  
CV_CAP_UNICAP   =600,   // Unicap drivers  
CV_CAP_DSHOW    =700,   // DirectShow (via videoInput)  
CV_CAP_PVAPI    =800,   // PvAPI, Prosilica GigE SDK  
CV_CAP_OPENNI   =900,   // OpenNI (for Kinect)  
CV_CAP_OPENNI_ASUS =910,   // OpenNI (for Asus Xtion)  
CV_CAP_ANDROID  =1000,  // Android  
CV_CAP_XIAPI    =1100,   // XIMEA Camera API  
CV_CAP_AVFOUNDATION = 1200  // AVFoundation framework for iOS (OS X Lion will have the same API)
Run Code Online (Sandbox Code Playgroud)

可能CV_CAP_AVFOUNDATION = 1200就是您正在寻找的东西 - 尝试从 1200 开始循环,不要忘记删除break;,我认为您会找到您正在寻找的东西。