我正在使用视频输入库从网络摄像头获取帧。我想用C代码设置这台相机的FOCUS。
相机启用了 AUTO FOCUS 。没有办法禁用自动对焦并设置特定的焦点值。
此致 萨利赫......
答案 0 :(得分:11)
如果您使用OpenCV 3.1.0-dev版本和Python 2.7.5,以下代码剪辑应该可以帮助您;)
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
使用我的Logitech HD Pro网络摄像头C920工作正常。 cv2中还有许多其他很酷的控制功能,如cv2.CAP_PROP_BRITHNESS
或cv2.CAP_PROP_CONTRAST
。
看看自动完成向您显示的内容;)
答案 1 :(得分:5)
你试过这个:https://stackoverflow.com/a/1718009/7531它要求你使用directshow,但这应该是可能的。
否则,您是否看过OpenCV documentation for CameraCapture。有关摄像机参数的部分显示了 - 通常 - 您控制摄像机参数,快速查看videoinput.h
应该显示自动对焦的参数。
This is a complete example以这种方式设置自动对焦。
IAMCameraControl
是用于控制参数的Windows界面。
请注意,根据您使用的网络摄像头和/或特定固件版本,可能无法完全控制对焦/自动对焦。
答案 2 :(得分:2)
我已经为几天的情侣搜索了这个问题,并尝试了视频输入库和directshow。 如果您只想在opencv中设置一次(手动)相机参数,我找到的最简单的方法是:
VideoCapture cap(0);
cap.set(CV_CAP_PROP_SETTINGS, 1);
它将弹出一个窗口供您设置参数。足以禁用自动对焦。
这种方法的不便之处在于,如果你想通过程序控制焦距,它就不能这样做。
答案 3 :(得分:1)
您正在寻找的功能是相机和驱动程序特定的。 The OpenCV camera property controls仅提供非常基本的参数 通过OpenCV进行调用没有通用的方法。
要做到这一点,而不是通过OpenCV,您可以执行以下操作之一:
cap.set(CV_CAP_PROP_SETTINGS, 1);