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

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

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

Ответы [ 3 ]

11 голосов
/ 11 ноября 2009

Камеры 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. Вы можете получить его, перечислив устройства и найдя нужное.

2 голосов
/ 20 марта 2012

Попробуйте использовать uvcdynctrl где -l флаг должен перечислить вам особенности и -s можно использовать для установки любой функции http://manpages.ubuntu.com/manpages/natty/man1/uvcdynctrl.1.html

0 голосов
/ 14 июля 2016

С помощью 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

...