cvCaptureFromCAM导致程序挂起

时间:2013-08-22 18:26:53

标签: c++ opencv

我有一个多摄像头设置和一个使用两个摄像头工作的OpenCV应用程序。一台摄像机是罗技C310,另一台是我的MacBook Pro内置摄像头。初始化时,我为每个摄像头调用一次cvCaptureFromCAM()。然而,连接第二台Logitech C310(总共3台摄像机)会导致cvCaptureFromCAM()的调用挂起我的MacBook专业摄像机。

两台罗技相机都可以很好地协同工作。一旦我为我的MacBook相机调用cvQueryFrame()它就会挂起,但最终在2-3分钟后它会返回看似有效的指针(即非NULL),但该相机未初始化。我没有从相机那里收到任何帧,并且在使用相机时通常为绿色的灯不亮。

以下是我的代码片段:

for( size_t i = 0; i < NUM_CAMERAS; i++ ) // Works fine when NUM_CAMERAS is 2, but hangs when it is 3
{
    capture[i] = cvCaptureFromCAM( i );

    if( capture[i] != NULL )
    {
        // Start a thread for each camera
    }
}

// Threads manage calling cvQueryFrame() for each camera.

我确信这不是多线程的问题,因为即使我没有启动任何新线程,cvQueryFrame()也会挂起。

感谢您的帮助 - 我找不到其他有类似问题的人。

OpenCV 2.4.5 OSX 10.8.4 gcc 4.2 Qt 5.0.2 提升版本105300 2.4GHz Intel Core i7,视网膜Mac,8BG RAM 2 x罗技C310,1 x MacBook Pro相机 1 x沮丧的家伙

1 个答案:

答案 0 :(得分:2)

原来这是我的MacBook Pro的限制。运行2个USB摄像头以及内置的iSight(我相信内部也是USB),第3个设备的初始化挂起。我无法提供技术原因,但似乎是USB带宽问题。

我通过使用具有额外USB端口的Thunderbolt底座(http://www.belkin.com/us/p/P-F4U055)解决了这个问题。现在我的应用程序工作正常并初始化所有相机应该。还验证了Apple Thunderbolt显示屏(内置USB集线器)也可以使用。

干杯!