同步线程以完全同时读取不同的资源

时间:2016-10-11 09:32:56

标签: multithreading opencv locking mutex

我有两个摄像头,这对于同时使用OpenCV读取帧很重要,我想像Lock,但我无法弄清楚我可以实现这个的方式。

我需要一些触发器来推送并启用线程来读取帧,然后等待另一个触发器命中,如下所示:

def get_frame(queue, cap):
    while running:
        if(read_frame):
            queue.put(cap.read());
        else:
            # without this sleep this function just consumes unnecessary CPU time
            time.sleep(some_time);

q = Queue.Queue()
# for every camera
for u in xrange(2):
    t = threading.Thread(target=get_frame, args = (q, caps[u]))
    t.daemon = True
    t.start()

上述实施的问题是:

  1. 我需要定义睡眠时间,因为我不知道每帧读取之间的delay(即它可能是长或短,取决于计算)
  2. 这使我无法在每次触发命中时读取一次。
  3. 所以这种方法不起作用,有什么建议吗?

1 个答案:

答案 0 :(得分:0)

考虑从VideoCapture获取FPS。另请注意VideoCapture.grab和VideoCapture.retrieve帧之间的区别。这用于相机同步。

首先为两个摄像头调用VideoCapture#grab,然后检索帧。请参阅docs