2009-11-11 11 views
12

Próbuję wykonać wizję komputera za pomocą kamery internetowej (model to Hercules Dualpix). Wiem, że nie jest to idealny aparat, ale nie mam wyboru.Jak programowo wyłączyć automatyczne ustawianie ostrości kamery internetowej?

Problem polega na tym, że autofokus sprawia, że ​​kalibracja kamery jest trudna/niemożliwa. Każdy zna sposób wyłączenia funkcji automatycznego ogniskowania. Lub, jeśli ktoś ma pomysł, aby sobie z tym poradzić i skalibrować aparat za pomocą autofokusu.

Odpowiedz

10

Kamery Hercules są zgodne z UVC, więc powinny współpracować z interfejsem DirectShow IAMCameraControl. Możesz ustawić ostrość na konkretną wartość i użyć flag, aby ustawić, że nie chcesz, aby było automatyczne. Możesz użyć numeru IAMCameraControl::Get do odpytywania bieżącego stanu, ponieważ nie wszystkie kamery obsługują wyłączanie fokusa.

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); 
} 

Fokus ma zasięg który jest zdefiniowany przez każdej kamery osobno, więc należy go zapytać, jak pokazano na znalezienie wartość domyślną oraz min, max, jeśli chcesz. W tym przykładzie pFilter jest wskaźnikiem do filtra wejściowego, który masz z DirectShow. Możesz go uzyskać przez enumerating the devices i znaleźć ten, który chcesz.

+0

Dzięki. Dokładnie to, co chciałem! Najpierw nie działał, ale uaktualniłem sterownik kamery i oprogramowanie sprzętowe i wszystko działa. – jslap

+0

Jak to zrobić w przypadku kilku kamer internetowych? – user1651460

+1

wszystkie jego okna były opcją dla systemu Linux? –

0

Z niewielką pomocą z OpenCV i Pythonie można zrobić to bardzo proste:

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

używam OpenCV 3.1.0-dev, Python 2.7.5 i Logitech HD Pro Webcam C920

+0

Nie działa to jednak w celu robienia zdjęć z wielokrotną ekspozycją. – Abc

Powiązane problemy