2016-10-11 8 views
2

私は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. これは、トリガーヒットごとに1回読むことはできません。

このアプローチは機能しません。

+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#grabを呼び出し、フレームを取得します。 docsを参照してください。

関連する問題