我正在使用PS-Eye-3摄像头、libusb、PSEye driver、OpenCV 3.4.2和Windows10上的Visual Studio2015/ C++。
我可以使用下面的代码将相机的曝光量设置为任何值:
cv::VideoCapture *cap;
...
cap = new cv::VideoCapture(0);
cap->set(CV_CAP_PROP_EXPOSURE, exposure); // exposure = [0, 255]
现在我也想切换到自动曝光。如何将相机设置为自动曝光模式?
我尝试了以下几种方法:
cap->set(CV_CAP_PROP_EXPOSURE, 0); // not working
cap->set(CV_CAP_PROP_EXPOSURE, -1); // not working
cap->set(CV_CAP_PROP_AUTO_EXPOSURE, 1); // not working, exposure stays fixed
cap->set(CV_CAP_PROP_AUTO_EXPOSURE, 0); // not working, exposure stays fixed
cap->set(CV_CAP_PROP_AUTO_EXPOSURE, -1); // not working, exposure stays fixed
有什么想法吗?
发布于 2021-10-07 06:37:58
我想我终于找到了解决方案,至少对我的问题来说,
capture = cv2.VideoCapture(id)
capture.set(cv2.CAP_PROP_AUTO_EXPOSURE, 3) # auto mode
capture.set(cv2.CAP_PROP_AUTO_EXPOSURE, 1) # manual mode
capture.set(cv2.CAP_PROP_EXPOSURE, desired_exposure_value)
我必须首先将auto_exposure设置为3(自动模式)
然后我必须将其设置为1(手动模式)
然后我可以设置手动曝光
您也可以使用shell设置这些设置
列出可用选项
video_id=1
v4l2-ctl --device /dev/video$video_id -l
用python设置它们
def set_manual_exposure(dev_video_id, exposure_time):
commands = [
("v4l2-ctl --device /dev/video"+str(id)+" -c exposure_auto=3"),
("v4l2-ctl --device /dev/video"+str(id)+" -c exposure_auto=1"),
("v4l2-ctl --device /dev/video"+str(id)+" -c exposure_absolute="+str(exposure_time))
]
for c in commands:
os.system(c)
# usage
set_manual_exposure(1, 18)
https://stackoverflow.com/questions/53545945
复制相似问题