Подтвердить что ты не робот

Как программно отключить автофокус веб-камеры?

Я пытаюсь сделать компьютерное зрение с помощью веб-камеры (модель Hercules Dualpix). Я знаю, что это не идеальная камера, но у меня нет выбора.

Проблема заключается в том, что автофокус делает невозможным калибровку камеры. Любой знает, как отключить функцию автофокуса. Или, если у кого-то есть идея справиться с этим и откалибровать камеру с автофокусом.

4b9b3361

Ответ 1

Камеры 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); 
} 

Фокус имеет диапазон, который определяется каждой камерой отдельно, поэтому вы должны запросить его, как показано, чтобы найти значение по умолчанию и min, max, если хотите. В этом примере pFilter является указателем на входной фильтр, который вы используете в DirectShow. Вы можете получить перечисление устройств и найти тот, который вы хотите.

Ответ 3

С небольшой помощью 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 Pro C920