2016-10-11 64 views
2

我有两个摄像头,这是非常重要的在同一时间读取与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. 我需要因为我不知道ev之间的延迟,所以要定义睡眠时间红框读取(即可能长或短,取决于计算)
  2. 这使我无法读取每次触发命中一次。

所以这种方法不起作用,有什么建议吗?

+0

因为,我现在没有2台摄像机,请您评论一下同步的工作情况。 – saurabheights

+0

@saurabheights当然,我正在处理它,我提到一个问题[这里](http://stackoverflow.com/questions/40060515/how-to-capture-video-from-webcam-in-mjpg-opencv) ;如果我能解决它,那么下一个阶段就是同步。但你的建议的基本和天真的执行似乎目前工作正常。 – dariush

回答

0

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

首先调用VideoCapture#抓取两个摄像头,然后检索帧。见docs