【问题标题】:OpenCV Multi-thread callOpenCV 多线程调用
【发布时间】:2010-12-09 23:04:49
【问题描述】:

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

【问题讨论】:

  • 嗯,你真的应该详细说明你的问题。为什么要同时在两个线程中获取相同的图像?您当前运行的代码是否存在特定问题?

标签: .net c++ multithreading opencv camera


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 2021-05-21
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      相关资源
      最近更新 更多