0

我制作了一个程序,它有两个线程,很快就会是三个,它试图同时从两个线程的网络摄像头获取图像。有没有办法做到这一点,或者有更好的方法来做到这一点?(使用openCV 1.1)

4

2 回答 2

1

我是否可以建议让你的一个线程(让我们称之为主要线程)与相机交谈,获取图像并完成所有设置。一旦它被设置并放置在内存中的某个位置,您就可以通知第二个线程该位置在哪里(在此过程中使用互斥锁),两个线程都可以关闭并进行处理。一旦两个线程都处理完该图像(在这里也使用互斥锁),您可以让主线程获取另一个图像并重新开始该过程。

如果您的相机正在生成大量图像,并且您想在两个线程完成之前开始处理它们,您可能需要转到三个线程......一个只是为了获取图像,另外两个只是为了做两种处理方式。这将变得更加复杂,因为您需要有多个缓冲区。您可能还需要多个互斥锁,也可能需要几个队列,不过这一切都是可行的:-)

于 2009-10-26T20:57:34.697 回答
0

如果您希望两个线程都能够处理图像,您应该编写一个为您提供当前图像的方法。您可以在第一次调用该方法时从 cam 获取图像并阻止调用,直到图像加载。然后您可以返回缓冲的图像,直到您想要获取下一个图像。这样,两个线程都采用相同的路由到摄像头,OpenCV 不必尝试打开与摄像头的连接,如果您只是在未加载图像时阻塞,则多个线程可以在保存图像数据后获取图像数据同时。

于 2009-10-26T14:08:37.283 回答