我正在尝试使用网络摄像头进行计算机视觉(模型是Hercules Dualpix)。我知道它不是理想的相机,但我在这里别无选择。
问题是自动对焦使得校准相机变得困难/不可能。任何人都知道一种禁用自动对焦功能的方法。或者,如果有人想要处理它并使用自动对焦校准相机。
答案 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