编程语言
首页 > 编程语言> > c – 如何以编程方式禁用网络摄像头的自动对焦?

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