私のロボットビジョンプロジェクトでは、動く物体のマーカーを検出する必要がありますが、動きが原因で画像にぼかし効果が生じます。デコンボリューションメソッドは非常に低速です。それで、私はより高いfpsカメラを使うことを考えていました。誰かが私はより高いfpsを必要とせず、代わりにより短い露出時間を必要とすると言った。
OpenCVのPythonインターフェースcv2
はカメラの設定を変更する方法を提供しますが、「露出時間」または「シャッター速度」の設定は含まれません。また、ウェブカメラがこの種の設定をサポートしていないことも心配です。
その他の考え:
カメラ設定を使用してぼかし効果を排除しますか?
OR
リアルタイムパフォーマンスによる画像の復元?
OR
リアルタイムロボットアプリケーション用の低コストカメラに関する提案はありますか?
OpenCVのVideoCapture
オブジェクトのプロパティを変更するために使用できるメソッドがあり、これを使用して入力画像の露出を設定できます。
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_EXPOSURE, 40)
ただし、このパラメーターはすべてのカメラでサポートされているわけではありません。各カメラタイプは、パラメーターを設定するための異なるインターフェイスを提供します。 OpenCVコードには、それらの多くをサポートするための多くのブランチがありますが、もちろんすべての可能性が網羅されているわけではありません。
私のカメラも同じです。だから私は別の解決策を見つけなければなりませんでした。これは、コマンドラインターミナルからv4l2_ctl
ユーティリティを使用しています。
v4l2-ctl -d /dev/video0 -c exposure_absolute=40
ただし、これは現在のビデオセッションのみの価値を保持します。つまり、最初にビデオプレビューを開始してからこのプロパティを設定する必要があります。VideoCapture
がリリースされるとすぐに、露出値がデフォルトに戻ります。
pythonスクリプト内で露出を制御したかったため、subprocess
モジュールを使用してLinux bashコマンドを実行しました。
import subprocess
subprocess.check_call("v4l2-ctl -d /dev/video0 -c exposure_absolute=40",Shell=True)