OpenCV на Mac не открывает веб-камеру USB

Мне не удалось использовать OpenCV VideoCapture.open(int), чтобы получить захват видео с веб-камеры USB на моем MacBook Pro, работающем под управлением Mac OS X v10.7 (Lion). Использование open(0) успешно получает снимок с камеры iSight. Но мне не повезло, когда я пытался найти веб-камеру.

Веб-камера установлена ​​и хорошо работает со Skype и приложением драйвера macam.

Вот часть кода, который я использую:

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;
}

Если я инициализирую i с 0 он сразу находит камеру iSight. Если я инициализирую i с 1, то снова находит iSight, когда i = 500

Как я могу исправить эту проблему?

1 ответ

Попробуйте запустить свой код без этой строки: 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)

Наверное CV_CAP_AVFOUNDATION = 1200 это то, что вы ищете - попробуйте начать цикл с 1200 и не забудьте удалить break; и я думаю, что вы найдете то, что ищете.

Другие вопросы по тегам