首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在OpenCV 3.4.2中将相机设置为自动曝光?

如何在OpenCV 3.4.2中将相机设置为自动曝光?
EN

Stack Overflow用户
提问于 2018-11-30 03:07:45
回答 3查看 7K关注 0票数 0

我正在使用PS-Eye-3摄像头、libusbPSEye driver、OpenCV 3.4.2和Windows10上的Visual Studio2015/ C++。

我可以使用下面的代码将相机的曝光量设置为任何值:

代码语言:javascript
运行
复制
cv::VideoCapture *cap;  
...
cap = new cv::VideoCapture(0);
cap->set(CV_CAP_PROP_EXPOSURE, exposure); // exposure = [0, 255]

现在我也想切换到自动曝光。如何将相机设置为自动曝光模式?

我尝试了以下几种方法:

代码语言:javascript
运行
复制
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

有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2019-05-13 03:43:00

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

票数 0
EN

Stack Overflow用户

发布于 2021-05-05 16:53:23

这取决于您使用的捕获api。如果您使用的是CAP_V4L2,则自动曝光设置为'on‘,其值为3,'off’,其值为1。

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

我认为对于OpenCV < 4.0,默认的api是CAP_GSTREAMER,自动曝光设置为'on‘,值为0.75,'off’,值为0.25。

票数 0
EN

Stack Overflow用户

发布于 2021-10-07 06:37:58

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

代码语言:javascript
运行
复制
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设置这些设置

列出可用选项

代码语言:javascript
运行
复制
video_id=1
v4l2-ctl --device /dev/video$video_id -l

用python设置它们

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53545945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档