0

我正在 Windows 10 上使用PS-Eye-3相机、libusbPSEye 驱动程序、OpenCV 3.4.2 和 Visual Studio 2015 / 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

有什么想法?

4

3 回答 3

0

我想我终于找到了解决方案,至少对于我的问题,

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)
于 2021-10-07T06:37:57.590 回答
0

尝试 cap->set(CV_CAP_PROP_AUTO_EXPOSURE, X); 其中 X 是与相机相关的值,例如 0.25 或 0.75。对于类似的问题,请参阅讨论: https ://github.com/opencv/opencv/issues/9738

于 2019-05-12T19:42:59.777 回答
0

这取决于您使用的捕获 api。如果您使用的是 CAP_V4L2,则自动曝光设置为“开”(值为 3)和“关”(值为 1)。

所有可设置的值都可以通过v4l2-ctl -l在终端中输入来找到。

我认为对于 OpenCV < 4.0,默认 api 是 CAP_GSTREAMER,自动曝光设置为“开”,值为 0.75,“关”,值为 0.25。

于 2021-05-05T08:53:23.357 回答