OpenCV、EmGU、DirectShowなどの「標準」ライブラリのいずれかを使用して、オートフォーカスがフォーカスしないようにする方法はありますか?
オートフォーカスで最適なフォーカスを見つけてから、ビデオキャプチャ中にオートフォーカスがオートフォーカスを行わないようにしたい。
値を手動で設定できることはわかっていますが、それではオートフォーカスを使用する目的に反するため、オートフォーカスによって決定される最適なフォーカス値を取得する方法をまだ見つけていません。
フォーカスを制御するためのネイティブ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
インターフェイス経由)。
残念ながら、多くのカメラは、基本的に組み込みのオートフォーカス機能だけに依存してこれほど正確に実装されていません。まず、自動または手動のリフォーカスが進行中かどうかのステータスを読み取ることはできません。自動モードで現在の設定を読み取ると、誤った値が返される場合があります(たとえば、最後に手動フォーカス中に使用された)。フォーカスを操作するための標準的な定義された方法はありますが、アクティブに使用されていないものであり、十分に機能しない可能性があります。おそらくあなたは特定のモデルに興味があり、カメラはこれをうまく実装しています。
画像分析による焦点の特定では、近隣の回答にすでにポインタがあります。