2016-10-11 88 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