ウェブカメラを使用してコンピュータービジョンを実行しようとしています(モデルはHercules Dualpixです)。使用するのに理想的なカメラではないことは知っていますが、ここでは選択の余地がありません。
問題は、オートフォーカスによってカメラのキャリブレーションが困難/不可能になることです。オートフォーカス機能を無効にする方法は誰でも知っています。または、誰かがそれに対処し、オートフォーカスでカメラを調整するアイデアを持っている場合。
ウェブカメラを使用してコンピュータービジョンを実行しようとしています(モデルはHercules Dualpixです)。使用するのに理想的なカメラではないことは知っていますが、ここでは選択の余地がありません。
問題は、オートフォーカスによってカメラのキャリブレーションが困難/不可能になることです。オートフォーカス機能を無効にする方法は誰でも知っています。または、誰かがそれに対処し、オートフォーカスでカメラを調整するアイデアを持っている場合。
HerculesカメラはUVCに準拠しているため、DirectShowインターフェイスIAMCameraControlで動作するはずです。フォーカスを特定の値に設定し、フラグを使用して、フォーカスを自動化しないように設定できます。IAMCameraControl::Get
すべてのカメラがフォーカスのオフをサポートしているわけではないため、を使用して現在の状態をポーリングできます。
IAMCameraControl *pCameraControl;
HRESULT hr;
hr = pFilter->QueryInterface(IID_IAMCameraControl, (void **)&pCameraControl);
if (hr == S_OK) {
long defaultFocusValue;
hr = pCameraControl->GetRange(CameraControl_Focus,
NULL, // min
NULL, // max
NULL, // minstep
&defaultFocusValue, // default
NULL); // capflags
hr = pCameraControl->Set(CameraControl_Focus, // property
defaultFocusValue, // value
CameraControl_Flags_Manual);
}
フォーカスには、各カメラによって個別に定義される範囲があるため、必要に応じて、デフォルト値と最小値、最大値を見つけるために、図のようにクエリを実行する必要があります。この例でpFilter
は、はDirectShowからの入力フィルターへのポインターです。デバイスを列挙し、必要なデバイスを見つけることで取得できます。
uvcdynctrlを使用してみてください 。ここで、-lフラグを使用すると機能が一覧表示され、-sを使用して任意の機能を設定できます http://manpages.ubuntu.com/manpages/natty/man1/uvcdynctrl.1.html
OpenCVとPythonの少しの助けを借りて、これを非常に簡単に行うことができます。
cap = cv2.VideoCapture(1) # my webcam
cap.set(3, 1280) # set the resolution
cap.set(4, 720)
cap.set(cv2.CAP_PROP_AUTOFOCUS, 0) # turn the autofocus off
OpenCV 3.1.0-dev、Python 2.7.5、およびLogitech HD ProWebcamC920を使用しています