如何以编程方式禁用网络摄像头的自动对焦?

时间:2009-11-11 20:16:09

标签: c++ directx webcam computer-vision

我正在尝试使用网络摄像头进行计算机视觉(模型是Hercules Dualpix)。我知道它不是理想的相机,但我在这里别无选择。

问题是自动对焦使得校准相机变得困难/不可能。任何人都知道一种禁用自动对焦功能的方法。或者,如果有人想要处理它并使用自动对焦校准相机。

3 个答案:

答案 0 :(得分:11)

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输入过滤器的指针。你可以通过enumerating the devices获得它并找到你想要的那个。

答案 1 :(得分:2)

尝试使用 uvcdynctrl 其中-l标志将列出您的功能 和-s可用于设置任何功能 http://manpages.ubuntu.com/manpages/natty/man1/uvcdynctrl.1.html

答案 2 :(得分:0)

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