5

我没有成功使用OpenCV的 VideoCapture.open(int) 从运行 Mac OS X v10.7 (Lion)的MacBook Pro中的 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;
}

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

我该如何解决这个问题?

4

1 回答 1

1

尝试在没有此行的情况下运行您的代码:break;. 您可能会发现不止一台摄像头,其中一台将是网络摄像头。
请注意,参数 ofcap.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)

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

于 2013-01-07T00:23:20.093 回答