2016-04-03 3 views
1

私はビデオカメラから読み込み、すべてのフレームの最大の色の強さを検出するプログラムを持っています。私は、カメラの視野を横切ってレーザーポインターを走らせると破線の効果があることに気づいた。ビデオカメラのストリームが連続的にキャプチャされない

これは、カメラのfpsがカメラのシャッター速度よりも小さいためだと思います。またはそのウェイトキー機能がその期間中にカメラを読み取るのを妨げることを意味する。

このエフェクトを削除する方法はありますか。レーザーポインターをカメラの視点にストリークすると、連続した線が残ります。

編集:可能であれば、リアルタイムで結果が必要です。あなたが最初のビデオを保存し、後でそれを処理しようとする必要があり

while 1: 
     ret, view = vid.read() 
     outputImg = processImage(view) 
     cv2.waitkey(1) 
     imshow(outputImg) 

enter image description here

+0

カメラのfpsとは何ですか? – Micka

+0

私は確信していませんが、私は自分のfpsがカメラバインディングではなくプロセスバインドだと思っています。私のプロセスは0.07秒ごとにフレームを取っているので〜15fps – kkawabat

答えて

0

:ここ

は、以下の単純化されたコードです。

while 1: 
     ret, view = vid.read() 
     outputImg = processImage(view) 
     cv2.waitkey(1) 
     imshow(outputImg) 

あなたのコードは、フレームをキャプチャして、あなたのprocessImage機能を使用して、それを処理し、cv2.waitkey(1)で待機してから処理されたフレームを表示し、そして最後に、再び次のフレームを読み込みます。したがって、2つのフレームの読み取りの間に時間の経過があります。

while 1: 
    ret, frame = vid.read()     
    out.write(frame) 
+0

ありがとうございます。これは初心者ですが、あなたの例には何がありますか?私はまた、リアルタイムで画像を出力する必要があることを忘れてしまった。 – kkawabat

0

shiva's提案は、おそらくあなたの結果を改善するが、それはまだ予測不可​​能になり、動作が大幅にカメラの機能とそれを制御する能力に依存します:あなたはこのようにそれを保存することができます。私はそのギャップがそこにあることを期待する。

  • は、フレーム内の各ストリークのエンドポイントを探す:

    代わりに、私はこれを修正する試みになるだろう。

  • 隣接するフレーム内の2つの隣接するエンドポイントを検索します。
  • これらの2点を結ぶ人工レーザー線を描く。何らかの理由で補間するが、それでもほぼリアルタイムで処理を行うことができるようにする必要があることができない場合は(おそらく、両端から採取したサンプルを使用して、それらの間を補間することによって)

は、考えます画像取得を別のスレッドに入れます。フレーム間のギャップを最小にするには、このスレッドを高優先度に設定します。カメラから

  • 獲得枠:

    このスレッドは、繰り返しになります。

  • フレームを同期キューに挿入します。

次に、同期スレッドからフレームを取得し、必要な処理を実行する処理スレッド(これはメインスレッドでもよい)を作成します。


最良の結果を達成するために、あなたはカメラが自動的にトリガし、そしてプロセスにコンピュータにデータのストリームを送信し、「フリーラン」モードで実行することができますカメラを使用する必要があります。

これは、OpenCVと通常のウェブカメラでは直接行うことができない場合があります。 GigEVisionまたはUSB3のいずれかの低価格の産業用カメラが適しているかもしれません。 (AVTマンタ、Baslerスカウトなど)あなたの価格帯から外れている場合は、EBayに関するいくつかの良い取引を見つけることができるかもしれません。

カメラを制御してフレームを取得するために特別なAPIを使用する必要がありますが、残りの処理はOpenCVを使用して行われます。

+0

提案していただきありがとうございますが、私はこのプログラムの後の使用で実際に補間することはできません。 – kkawabat

+1

その場合、ビデオ取得を専用の高優先度スレッドに入れます。それらを別のスレッドで非同期に処理するキューに送ります。 –

+0

または、このプロジェクトの要件と目的に応じて、「フリーラン」モードで実行できるカメラに行くことができます。つまり、カメラが自動的に起動し、フレームをコンピュータに継続的に送信します。 GigEVision(またはUSB3)産業用カメラの中には、おそらくそれが良いだろう。もちろん、それらは正確に安いわけではありませんが、あなたはEBayで良いお得な情報を見つけることができます。 –

関連する問題