繁体   English   中英

带OpenCV的多台摄像机

[英]Multiple cameras with OpenCV

我正在编写一个程序,使用OpenCV同时从两个摄像头捕获(我不是这样做的立体视觉)。 使用标准的OpenCV函数cvCaptureFromCAM()从两个相同的摄像头获取捕获以及在while循环中调用两次cvQueryFrame() (每次捕获一次),我最终在两个摄像头中获取垃圾图像,如我显示它们时所见在cvNamedWindow

或者,如果我在他们自己的POSIX线程(因此相同的地址空间)中运行每个摄像头,我在第二个线程中得到一个分段错误,我无法弄清楚原因。

最后,我可以在自己的进程中运行每个摄像头(因此单独的地址空间),一切运行正常。 我怀疑是在从不同的摄像机进行每个帧查询之前必须获取某种锁类资源。 希望有人对如何在同一个进程和同一个线程中获取两个捕获有一些想法 谢谢!

什么OS?

它非常依赖于摄像机及其驱动程序 - 特别是在使用Directshow的窗口上,如果它们需要一起工作,如果你需要以某种顺序或某种方式启动它们,那么它就是完全的机会。

如果您可以在单独的线程中自行运行摄像头并让它们通过某些中立系统(命名管道,tcp套接字,ramdisk中的文件)写入图像,您可能会发现它更可靠

对于使用COM库的每个线程,必须调用::CoInitializeEx( NULL,COINIT_MULTITHREADED)一次,并在完成捕获工作时::CoInitializeEx( NULL,COINIT_MULTITHREADED)初始化。

要在同一进程和同一个线程中获取两个捕获,您是否为cvQueryFrame()使用的缓冲区分配了一个副本? 我怀疑你的两个捕获来自cvQueryFrame()共享相同的缓冲区,这个缓冲区实际上是由OpenCV本身维护的! 因此,请尝试为每个捕获创建一个副本,看看它是否有效。

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM