cvCaptureFromCAM 导致程序挂起

Posted

技术标签:

【中文标题】cvCaptureFromCAM 导致程序挂起【英文标题】:cvCaptureFromCAM causes program to hang 【发布时间】:2013-08-22 18:26:52 【问题描述】:

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

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

这是我的代码的 sn-p:

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 海合会 4.2 Qt 5.0.2 升压版 105300 2.4GHz 英特尔酷睿 i7、视网膜 Mac、8BG 内存 2 个罗技 C310、1 个 MacBook Pro 摄像头 1 x 沮丧的家伙

【问题讨论】:

可能它不起作用,但你可以尝试使用不同的 API(可能默认的 API 有一些错误) - ***.com/questions/14187866/… 我正在继续深入研究,但看起来这可能与 OpenCV 无关,可能只是我的 MacBook Pro 的问题。如果我将 2 个网络摄像头连接到我的笔记本电脑(外加 1 个内置 iSight)并观看实时视频,前两个工作正常,但第三个锁定并且永远不会初始化。 【参考方案1】:

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

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

干杯!

【讨论】:

USB 2.0 带宽是一个可能的原因,这里有很多关于这个限制的主题 - ***.com/questions/11222813/…

以上是关于cvCaptureFromCAM 导致程序挂起的主要内容,如果未能解决你的问题,请参考以下文章

出现了一个问题,该问题导致了此程序停止与 Windows 进行交互,急求解决方案!奖励50分!

“范围:”http 标头导致 ColdFusion 应用程序挂起

AppHangB1该问题导致了此程序停止与 Windows 进行交互应用程序名

编写多个视频会导致挂起

使用 OpenCV 的多个摄像头

Ogre3d restoreConfig 导致应用程序在 Ubuntu 上挂起