opencv上设置摄像头曝光参数的经验

这篇具有很好参考价值的文章主要介绍了opencv上设置摄像头曝光参数的经验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实际应用中我们需要调整摄像头的参数比如曝光,由于opencv的后端是一般编译是支撑多种插件,详细信息请参考OpenCV: Video I/O with OpenCV Overview,这里引用里面的图:

opencv上设置摄像头曝光参数的经验

 文章来源地址https://www.toymoban.com/news/detail-450336.html

对于VideoCaputure,后端有ffmpge,V4L,DShow等,opencv并没有完全用统一参数来屏蔽后端的差异性,也就是部分参数需要依据选择的后端来确定是否实现或者参数范围。

你可以通过下面命令查看当前opencv编译支撑了哪些后端:

C++ :   cout<<cv::getBuildInformation()<<endl;

Python:  cv2.getBuildInformation()

以opencv修改曝光参数为例,常见的python代码形式如下:

vs.stream.set(cv2.CAP_PROP_AUTO_EXPOSURE,0.25)   #选择手动曝光

vs.stream.set(cv2.CAP_PROP_EXPOSURE,-4)   #设置曝光参数

这个代码在windows上可以正常修改曝光,但是linux可能报错(依据缺省的后端),出现类似下面的错误:

GStreamer warning: unhandled property: 15

这是因为linux下缺省用有时候是gstreamer做后端,而该接口没有实现曝光调整,如需让曝光有效,在linux平台需要强制使用V4L的后端,即在创建caputure时候通过参数指定:

cv::VideoCapture cap(0, cv::CAP_V4L);

指定V4L作为后端,则对应的参数范围也要做调整,在我的系统下测试切换曝光方式和设置曝光值都需要改变,常见的曝光参数都是负值,而V4L则需要传入标准正的值(见文档后面的曝光参数说明),你可以用v4l2-ctl 查看值的范围和当前值,下面方式是我实测有效的方法,其中os为nt表示是windows下的设置,缺省认为是linux系统

if os.name =='nt':

vs = VideoStream(src=1).start()

vs.stream.set(cv2.CAP_PROP_AUTO_EXPOSURE,0.25)

vs.stream.set(cv2.CAP_PROP_EXPOSURE,-4)

else:

v=VideoStream(src=0).stream

time.sleep(0.5)

v.stream.set(cv2.CAP_PROP_FRAME_WIDTH,640) #

v.stream.set(cv2.CAP_PROP_FRAME_HEIGHT,480)#

v.stream.set(cv2.CAP_PROP_AUTO_EXPOSURE,1.0)

v.stream.set(cv2.CAP_PROP_EXPOSURE,500)

vs=v.start()

Python系统中如果使用imutils.video其并没有提供切换到v4l的对外接口,可采用强制修改的方式实现,见下面红色部分(需根据自己python实际情况调整):

sudo vi  /usr/local/lib/python3.9/dist-packages/imutils/video/webcamvideostream.py   强制改变后端模式:

# from the stream

                #self.stream = cv2.VideoCapture(src)

                self.stream = cv2.VideoCapture(src,cv2.CAP_V4L)

                (self.grabbed, self.frame) = self.stream.read()

此外在打开摄像头和开始操作需要延时一下,否则出现下面错误:

requestBuffers VIDEOIO(V4L2:/dev/video0): failed VIDIOC_REQBUFS: errno=16 (Device or resource busy),出现这个错误后面就无法获取图像数据了。

曝光参数说明:

负值对应关系表

(计算公式 EXP_TIME = 2^(-EXP_VAL) UVC camera exposure timing in OpenCV | KUROKESU

opencv上设置摄像头曝光参数的经验

注意:V4L方式设置的曝光值就不是上面的负数,而是v4l2-ctl里面显示的值。

以曝光参数为例,网络提到的曝光参数都是负值,而v4l2的整数值除以100000 为秒(根据1.11. Camera Control Reference — The Linux Kernel documentation),假如值为200,那么就是20ms。

所以两者换算关系为:

Ev=2^(Ep)*10000  Ev为v4l2的曝光值而Ep为python下面的负数值。

如果希望通用保存的参数,因为Ep取值范围稀疏,可以以Ep的负值进行存储曝光值,如果是linux则利用上面公式转为正确值。

 

到了这里,关于opencv上设置摄像头曝光参数的经验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第十八届全国大学生智能汽车竞赛——摄像头算法(附带个人经验)

    参加了第十六,十七和第十八届全国大学生智能车竞赛,对摄像头的学习有部分心得,分享给大家,三届车赛,车赛生涯也算是到了尽头。打算从基础的算法开始,给各位一些个人看法,也是对车赛的一次总结。 闲话 :其实摄像头的算法有很多种,弄了两年摄像头,也只是

    2024年02月07日
    浏览(42)
  • 双目摄像头Matlab参数定标

    1、安装好python3,可以在anaconda中安装python3。 2、一个合适的双目摄像头。 3、一台可以运行Matlab的电脑。 4、一张棋盘图(可A4打印,若效果不佳,则可A3打印)。 棋盘图如下图所示:需要测量小方框的边长(一般单位为毫米:mm)。 注意: 1、左、右摄像头图像中必须包含单

    2023年04月08日
    浏览(32)
  • 使用OpenCV调用摄像头

    1.创建一个摄像头调用的空项目 2.添加上篇博客里已经改好的属性表——现有属性表 3.返回解决方案资源管理器,在源文件里添加新建项命名为摄像头调用 4.输入以下代码,开始调试,然后就会弹出摄像头 #include opencv2/highgui/highgui.hpp  #include opencv2/imgproc/imgproc.hpp  #include ope

    2024年02月05日
    浏览(45)
  • 智能车摄像头三轮PID参数调节

    代码已上传CSDN,包含摄像头和PID控制,设置了VIP可取这个小门槛,有兴趣可以点击下方链接自取哈。 https://download.csdn.net/download/weixin_53129688/87714428 https://download.csdn.net/download/weixin_53129688/87714428  

    2024年02月11日
    浏览(44)
  • 【opencv+图像处理】(Gui Features in OpenCV) 1-1摄像头:采集摄像头视频,读取视频帧,录制视频

    本专栏代码总库地址 https://github.com/xiawei20161308104/xv_opencv_tutorials 本节代码路径 xv_opencv_tutorials/VideoRelated/get_started_with_videos.py xv_opencv_tutorials/VideoRelated/get_and_set_video.py xv_opencv_tutorials/VideoRelated/save_video.py 参考官网 https://docs.opencv.org/4.x/d6/d00/tutorial_py_root.html 从设备,可以是摄像

    2024年02月03日
    浏览(68)
  • openCV使用c#操作摄像头

    效果如下: 1.创建一个winform的窗体项目(框架.NET Framework 4.7.2) 2.Nuget引入opencv的c#程序包(版本最好和我一致) 3.后台代码

    2024年02月13日
    浏览(39)
  • opencv调用海康威视工业摄像头

    opencv调用海康威视工业摄像头需要用到官方接口VideoCapture() 接口:cv2.VideoCapture() 作用:获取本地目录下的视频文件或者使用本电脑的摄像头获取实时数据;  “0” ,调用的是本地电脑摄像头 “1” ,调用的是外接摄像头 打开MVS  正常设置使画面正常  然后找到宽度和长度

    2024年02月13日
    浏览(44)
  • 如何使用Opencv调用电脑摄像头?

    当我们想要使用opencv对视频图像进行处理时,往往第一步便是需要调用电脑摄像头,下面博主将提供两种版本的代码(含详细注释),帮助大家学习如何使用Opencv调用电脑摄像头进行视频录制并保存: 一、C++版本 1. 从相机中读取视频 2. 从文件中读取视频 3. 保存视频 二、P

    2024年02月11日
    浏览(51)
  • opencv人与摄像头距离检测

    参考: https://chtseng.wordpress.com/2018/09/18/%E5%A6%82%E4%BD%95%E4%BC%B0%E7%AE%97%E5%89%8D%E6%96%B9%E4%BA%BA%E7%89%A9%E7%9A%84%E8%B7%9D%E9%9B%A2/ https://blog.csdn.net/captain5339/article/details/128857313

    2024年02月08日
    浏览(60)
  • OpenCV(视频加载与摄像头使用)

    目录 1、VideoCapture类 2、视频属性get()  3、视屏文件保存

    2024年02月12日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包