web-dev-qa-db-ja.com

オートフォーカスをロックする方法

OpenCV、EmGU、DirectShowなどの「標準」ライブラリのいずれかを使用して、オートフォーカスがフォーカスしないようにする方法はありますか?

オートフォーカスで最適なフォーカスを見つけてから、ビデオキャプチャ中にオートフォーカスがオートフォーカスを行わないようにしたい。

値を手動で設定できることはわかっていますが、それではオートフォーカスを使用する目的に反するため、オートフォーカスによって決定される最適なフォーカス値を取得する方法をまだ見つけていません。

12

フォーカスを制御するためのネイティブWindows APIは、IAMCameraControlとのインターフェイスで、CameraControl_Focusプロパティ。これは、DirectShowを介して利用可能であり、ほとんどの場合(確認しませんでしたが、現状のままであると期待しています)Media Foundationを介しても利用できます。質問の最初の段落で言及したライブラリは、これらのAPIの上で機能します。

たとえば、Logitech HD Webcam C615カメラ(フォーカスのある最初のランダムなカメラを取得したばかり)は、フォーカスに関してこのような機能を公開します。

  • CameraControl_Focus:51、フラグCameraControl_Flags_Auto | CameraControl_Flags_Manual、0..255、ステップ17、デフォルト51、キャップフラグCameraControl_Flags_Auto | CameraControl_Flags_Manual

これは、範囲が0..255で、増分が17であることを示唆しています。つまり、カメラには、16設定の範囲から自動フォーカスと手動フォーカスがあります。 APIは、オートフォーカスの可能性があるように設計されており、自動的に決定された設定を読み取り、この設定をフォーカスにロックして手動に切り替えます(すべてIAMCameraControlインターフェイス経由)。

残念ながら、多くのカメラは、基本的に組み込みのオートフォーカス機能だけに依存してこれほど正確に実装されていません。まず、自動または手動のリフォーカスが進行中かどうかのステータスを読み取ることはできません。自動モードで現在の設定を読み取ると、誤った値が返される場合があります(たとえば、最後に手動フォーカス中に使用された)。フォーカスを操作するための標準的な定義された方法はありますが、アクティブに使用されていないものであり、十分に機能しない可能性があります。おそらくあなたは特定のモデルに興味があり、カメラはこれをうまく実装しています。

画像分析による焦点の特定では、近隣の回答にすでにポインタがあります。

0
Roman R.