c – 如何以编程方式禁用网络摄像头的自动对焦?
作者:互联网
我正在尝试使用网络摄像头进行计算机视觉(模型是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的输入过滤器的指针.您可以在enumerating the devices之前找到它并找到您想要的那个.
标签:c,computer-vision,directx,webcam 来源: https://codeday.me/bug/20190930/1835169.html