在openCV中的多个程序中打开相机

Opening camera in multiple program in openCV

如何在openCV编写的多个程序中同时打开一个网络摄像头。顺便说一句,我已经连接了 3 个网络摄像头,并且在 openCV 的任何单个程序中都可以正常工作,但是为什么 两个程序不能同时使用它们?

这是限制还是有任何解决方法?

是的,这是有意限制

为什么?概念视图与硬件控制层有关。操作系统假定,有一些外围设备可以按需使用,但保持它们的使用上下文不可共享。

举个例子,假设是 USB 鼠标。虽然它可以在多个进程中使用,但一些推理告诉架构师,一只鼠标不应将事件馈送到多个 -( window )-framed -context 的情况(对,对,a.k.a.过程)

一些其他外围设备甚至是EventSENSOREventCOLLECTOR的实例,例如USB-Cameras可以接收和处理来自操作系统的信号以重新调整它们的物理状态(Pan-以倾斜-缩放为例 ).

更明显的是 1:1 关系假设,这是我们有时可能不希望在那里硬编码的东西。另一方面,如果一个进程指示它 go-left 而另一个 go-right 在同一时间?

同样,如果一个 USB 鼠标将它的动作和其他 MMI 交互事件发送到所有当前 运行 进程,谁会高兴?至少拖放UI-导航策略将成为一个有趣的彩票。

是的,有一个解决方法

最简单的“just-enough”方案包括 aCameraControllerPROCESS,它与 USB 保持 1:1 关系-设备并具有视觉 data-获取责任。在这里纳秒很重要,所以除了将字节移入缓冲区外,不要将任何 CPU_CLK 花在其他任何事情上。所有其他处理应留在 aVisualDataViewConsumerPROCESS 上,其中 openCV 可能 (和 自己花费数十和数百微秒。

此外它还有一个通信/服务供应部分,它允许其他分布式进程以并行方式访问获取的视觉对象data(以非阻塞,并发视图方式,这是分布式软实时处理必须的)。

如果一个人的体系结构需要更多功能或替代方案,这种分层方法允许在添加功能的同时将控制和性能开销保持在可接受的范围内。

如果将 ZeroMQ 与零拷贝

=48=]inproc: 虚拟抽象 传输class,其中作为技巧的代价确实失去了几乎零延迟,但是获得拥有强大的、可大规模分发的巨大力量 一个人可以扩展到一个、两个、十几个、数千个...你能想到的...免费主机