我正在尝试使用网络摄像头进行计算机视觉(模型是 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 Pro Webcam C920