C++ 如何以编程方式禁用网络摄像头的自动对焦?
我正在尝试使用网络摄像头(型号是Hercules Dualpix)进行计算机视觉。我知道这不是一个理想的相机使用,但我在这里没有选择C++ 如何以编程方式禁用网络摄像头的自动对焦?,c++,directx,webcam,computer-vision,C++,Directx,Webcam,Computer Vision,我正在尝试使用网络摄像头(型号是Hercules Dualpix)进行计算机视觉。我知道这不是一个理想的相机使用,但我在这里没有选择 问题是自动对焦使摄像机难以/不可能校准。任何人都知道禁用自动对焦功能的方法。或者,如果有人有办法解决这个问题,并用自动对焦校准相机。大力士相机符合UVC标准,因此应该使用DirectShow界面。您可以将焦点设置为特定值,并使用标志设置您不希望它是自动的。您可以使用IAMCameraControl::Get轮询当前状态,因为并非所有相机都支持关闭焦距 IAMCam
问题是自动对焦使摄像机难以/不可能校准。任何人都知道禁用自动对焦功能的方法。或者,如果有人有办法解决这个问题,并用自动对焦校准相机。大力士相机符合UVC标准,因此应该使用DirectShow界面。您可以将焦点设置为特定值,并使用标志设置您不希望它是自动的。您可以使用
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可用于设置任何功能
借助于OpenCV和Python,您可以非常轻松地完成这项工作:
cap=cv2.VideoCapture(1)#我的网络摄像头
第3章,第1280条#制定决议
第二套(4720)
cap.set(cv2.cap_PROP_AUTOFOCUS,0)#关闭自动对焦
我使用OpenCV 3.1.0-dev、Python 2.7.5和Logitech HD Pro网络摄像头C920谢谢。正是我想要的!首先,它不起作用,但我升级了摄像头驱动程序和固件,一切正常。如何为几个网络摄像头做到这一点?它都是windows,是Linux的选项吗?我的目标是通过编程实现。你可以使用类似系统的东西(“uvcdynctrl-s Backlight\0”);但这不适用于拍摄多次曝光的图像。