OpenCV多线程调用

时间:2009-10-25 19:40:47

标签: .net c++ multithreading opencv camera

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

2 个答案:

答案 0 :(得分:1)

我可能会建议让你的一个线程(让我们称之为主线程)与相机对话,获取图像并将其全部设置好。一旦将其设置并放置在内存中的某个位置,您就可以通知第二个线程所在位置(使用互斥锁执行此操作),并且两个线程都可以关闭并进行处理。一旦两个线程都完成了该图像(在这里也使用互斥),您可以让主线程获得另一个图像并开始该过程。

如果你的相机产生大量图像,并且你想在两个线程完成之前开始处理它们,你可能想要三个线程...一个只是为了得到图像,另外两个只是做两种类型的处理。这会变得更复杂,因为你需要有多个缓冲区。你也可能需要多个互斥体,也可能需要几个队列,尽管如此: - )

答案 1 :(得分:0)

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