文章目录

  • 不用测了
  • 下面测试auto_exposure_priority参数在自动曝光下的作用
  • 下面测试在自动曝光模式下如何实时获取曝光值
  • 测试摄像头在不同曝光值下的帧生成时间

不用测了

参考文章:Intel Realsense D435 pyrealsense2 get_option_range() 获取rs.option中参数值取值范围

突然发现,option.py中有option.auto_exposure_priority参数能够限制自动曝光以维持恒定的fps速率,所以就不用担心曝光时间过长导致fps下降了

想了想,不对,还是要测

因为自动曝光优先是在自动曝光开启时才用到的,当自动曝光关闭时,它就失去作用了。。。我检验一下

# -*- coding: utf-8 -*-
"""
@File    : 200108_测试获取Intel_Realsense_options参数.py
@Time    : 2020/1/8 13:18
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""
import timeimport numpy as np
import pyrealsense2 as rs
import cv2ctx = rs.context()pipeline = rs.pipeline(ctx)
cfg = rs.config()
cfg.enable_device('838212073161')
cfg.enable_stream(rs.stream.depth, 640, 360, rs.format.z16, 30)
cfg.enable_stream(rs.stream.color, 640, 360, rs.format.bgr8, 30)
pipeline_profile = pipeline.start(cfg)sensor = pipeline.get_active_profile().get_device().query_sensors()[1]
sensor.set_option(rs.option.enable_auto_exposure, True)
print(sensor.get_option(rs.option.exposure))  # 156.0
sensor.set_option(rs.option.exposure, 5000.000)
print(sensor.get_option(rs.option.exposure))  # 5000.0
sensor.set_option(rs.option.auto_exposure_priority, True)
print(sensor.get_option(rs.option.exposure))  # 5000.0

结果:

将曝光值设置为5000后,明显感觉传输帧变慢了(其实没慢,就是没曝光完全,存在残影),说明auto_exposure_priority并未限制曝光值以维持帧速率,为了保证验证的准确性,我又将auto_exposure_priority设置为False,发现还是同样的结果

下面测试auto_exposure_priority参数在自动曝光下的作用

# -*- coding: utf-8 -*-
"""
@File    : 200109_测试摄像头自动曝光优先.py
@Time    : 2020/1/9 14:43
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""import numpy as np
import pyrealsense2 as rs
import cv2ctx = rs.context()pipeline = rs.pipeline(ctx)
cfg = rs.config()
cfg.enable_device('838212073161')
cfg.enable_stream(rs.stream.depth, 640, 360, rs.format.z16, 30)
cfg.enable_stream(rs.stream.color, 640, 360, rs.format.bgr8, 30)
pipeline_profile = pipeline.start(cfg)sensor = pipeline.get_active_profile().get_device().query_sensors()[1]
sensor.set_option(rs.option.enable_auto_exposure, True)
sensor.set_option(rs.option.auto_exposure_priority, False)while True:frames = pipeline.wait_for_frames()color_frame = frames.get_color_frame()color_image = np.asanyarray(color_frame.get_data())cv2.imshow('win', color_image)cv2.waitKey(1)

结果:
将auto_exposure_priority设置为False,发现并没有出现帧速率下降的现象,每帧传来都约0.033秒(设置帧速率为30帧每秒):

将auto_exposure_priority设置为True,结果还是相同

那这个auto_exposure_priority参数有啥用???

仔细观察,还是有区别的,当设置auto_exposure_priority为True时,当摄像头的场景由暗向光转变,图像会突然闪亮一下,像是曝光过度的感觉,当场景由光向暗转变时,摄像头会在一瞬间暗得特别厉害,就是过渡不平滑;但是如果auto_exposure_priority设置为False时,过渡就会非常平滑

由于不知道这种平滑过渡或不平滑过渡会对我们项目带来哪些影响,就暂时按照它默认的设置吧,默认为Ture,参考:Intel Realsense D435 pyrealsense2 get_option_range() 获取rs.option中参数值取值范围

下面测试在自动曝光模式下如何实时获取曝光值

# -*- coding: utf-8 -*-
"""
@File    : 200108_测试获取Intel_Realsense_options参数.py
@Time    : 2020/1/8 13:18
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""
import time
import numpy as np
import pyrealsense2 as rs
import cv2ctx = rs.context()pipeline = rs.pipeline(ctx)
cfg = rs.config()
cfg.enable_device('838212073161')
cfg.enable_stream(rs.stream.depth, 640, 360, rs.format.z16, 30)
cfg.enable_stream(rs.stream.color, 640, 360, rs.format.bgr8, 30)
pipeline_profile = pipeline.start(cfg)sensor = pipeline.get_active_profile().get_device().query_sensors()[1]
sensor.set_option(rs.option.enable_auto_exposure, True)while True:print(sensor.get_option(rs.option.exposure))frames = pipeline.wait_for_frames()color_frame = frames.get_color_frame()color_image = np.asanyarray(color_frame.get_data())cv2.imshow('win', color_image)cv2.waitKey(1)

程序启动后,分别将摄像头在光暗处来回移动
结果:

曝光值一直都是156没变。。。。

然后我手动将曝光值设置成156,发现:

没有自动曝光的效果,极差!

难道说,在pipeline start后,就没有办法获取到实时曝光值了吗???

测试摄像头在不同曝光值下的帧生成时间

我擦嘞,发现测不出来,无论把曝光时间设为多少,它都是按照设置的帧率传过来,30fps,每帧就约33ms。。。

增大曝光值,它的残影就多了,就像本来要曝光200ms,它强制33ms就传过来一样,没爆光完全。。。

所以以前看到视频一卡一卡的,以为是帧传送慢了,其实不是,这是假象,真实的情况是图片存在残影,感觉里面物体移动变慢了,所以看起来像一卡一卡的一样

无论如何,现在还是暂时就使用它的自动曝光吧

# -*- coding: utf-8 -*-
"""
@File    : 200109_测试不同曝光值下帧生成时间.py
@Time    : 2020/1/9 16:52
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""import timeimport numpy as np
import pyrealsense2 as rs
import cv2ctx = rs.context()for dev in ctx.query_devices():# 先将设备的序列号放进一个变量里,免得在下面for循环里访问设备的信息过多(虽然不知道它会不会每次都重新访问)dev_serial = dev.get_info(rs.camera_info.serial_number)# 匹配序列号,重置我们需重置的特定摄像头(注意两个for循环顺序,哪个在外哪个在内很重要,不然会导致刚重置的摄像头又被访问导致报错)if '838212073161' == dev_serial:dev.hardware_reset()# 像下面这条语句居然不会报错,不是刚刚才重置了dev吗?莫非区别在于没有通过for循环ctx.query_devices()去访问?# 是不是刚重置后可以通过ctx.query_devices()去查看有这个设备,但是却没有存储设备地址?如果是这样,# 也就能够解释为啥能够通过len(ctx.query_devices())函数获取设备数量,但访问序列号等信息就会报错的原因了print('摄像头{}初始化成功'.format(dev.get_info(rs.camera_info.serial_number)))
# 如果只有一个摄像头,要让它睡够5秒(避免出错,保险起见)
time.sleep(5)pipeline = rs.pipeline(ctx)
cfg = rs.config()
cfg.enable_device('838212073161')
cfg.enable_stream(rs.stream.depth, 640, 360, rs.format.z16, 30)
cfg.enable_stream(rs.stream.color, 640, 360, rs.format.bgr8, 30)
pipeline_profile = pipeline.start(cfg)sensor = pipeline.get_active_profile().get_device().query_sensors()[1]
sensor.set_option(rs.option.exposure, 330)
sensor.set_option(rs.option.auto_exposure_priority, True)time0 = time.time()
while True:frames = pipeline.wait_for_frames()color_frame = frames.get_color_frame()color_image = np.asanyarray(color_frame.get_data())cv2.imshow('win', color_image)cv2.waitKey(1)time_difference = time.time() - time0print(time_difference)time0 = time.time()# cv2.imwrite('{:.3f}.jpg'.format(time.time()), color_image)


参考文章:Intel Realsense D435 pyrealsense2 get_option_range() 获取rs.option中参数值取值范围 获取默认值

Intel Realsense D435 测试摄像头在不同曝光值下的帧生成时间(防止曝光时间过长导致fps下降)auto_exposure_priority(没成功)相关推荐

  1. intel realsense d435深度摄像头使用

    intel realsense d435深度摄像头基本环境配置 基本参考官网给的教程来就ok的 ,这里还是发一下我最初配置d435的记录 官网链接: https://github.com/intel- ...

  2. Intel Realsense D435 hardware_reset() 摄像头重置记录 context.query_devices()

    摄像头重置后它自己不能马上恢复,如果我们重置后立即访问它们,就会出错,以下是一些问题记录: 之前是使用device=ctx.query_device(),后面重置后检测摄像头的时候直接用len(dev ...

  3. Intel Realsense D435 是否启动pipeline.start()就开始传输帧,还是只有我们调用wait_for_frames()函数时它才会传输帧?(任务管理器USB带宽内存测试)

    我猜想Intel Realsense D435摄像头只要启动pipeline.start()函数,就会开始传输帧,无论我们是否调用wait_for_frames()或者poll_for_frames( ...

  4. 为什么Intel Realsense D435深度摄像头在基于深度的水平方向障碍物检测(避障)方案中,摄像头不宜安装太高?

    补一句,为啥R与b对比就要比R与a对比更容易区分? 因为a与b的右端和障碍物R属同一深度,但b左端明显比a左端深度大,总体比a拥有差异性更大的深度范围,因此b与a相比,对R拥有差异性更大的深度范围, ...

  5. Intel Realsense D435 获取摄像头option参数值 get_option()

    def get_option(self, option): # real signature unknown; restored from __doc__"""get_o ...

  6. Tensorflow yolov3 Intel Realsense D435 单摄像头下各模块识别时间测试

    文章目录 1.一次循环总耗时 2.从循环开始到self.predict()之前 3.第一次循环主要耗时函数:wait_for_frames()(其实self.predict()函数在第一次循环更耗时) ...

  7. Intel Realsense D435 多摄像头配置 Multi-camera configurations (220)(官方测试的摄像头配置表【不同带宽下分辨率、帧率等】)

    参考文章:Multi-camera configurations 1.异步传输(stream asynchronously)是否会对我们的识别造成影响?如果有影响,影响是否可忽略不计. 2020032 ...

  8. Intel Realsense D435 多摄像头多线程目标识别架构

    每一个摄像头单独开一个线程,摄像头配置是否要放进线程内? 每一个摄像头线程内单独处理错误信息 每一个摄像头要存储最新彩色帧和深度帧(用于识别和获取深度信息) 接收打击信号要一个线程,对打击信号进行排序 ...

  9. Intel Realsense D435 当摄像头运行过程中突然USB线断开,对RuntimeError: Frame didn't arrived within 5000的异常捕获及处理

    如图,在摄像头运行过程中,摄像头突然断开,可能设备需要对异常进行捕获并处理(如摄像头重连,发出警报,发送信号给车辆让它停止前进等) 需阅读,python异常捕获及处理 191225 通过捕获所有异常, ...

最新文章

  1. Android AndFix热补丁动态修复框架使用教程
  2. 网络营销——网络营销专员如何应对网站关键词排名波动情况?
  3. iOS开发--一些UITabBarItem属性的设置[转]
  4. asp.net mvc3.0第一个程序helloworld开发图解
  5. linux set命令例子,学习一个 Linux 命令:declare/typeset 命令
  6. 客户端和服务器之间的信息结构,客户端和服务器之间的信息结构
  7. python俄罗斯方块代码34行_Python:游戏:300行代码实现俄罗斯方块
  8. UEFI开发探索31–鼠标GUI构建
  9. 一文详解中英文在NLP上的10大差异点
  10. eclipse下载哪个版本开发java_官网上有很多版本的eclipse,下载哪个版本比较合适?...
  11. libtorrent源码分析(四)LSD实现
  12. 离线编译安装lrzsz
  13. Array王锐力作:osg与PhysX结合系列内容——第5节 角色动画效果(下)
  14. FPGA时钟设计方案
  15. XDOJ 233/237-字符串复制
  16. python什么意思g_在外行人看来,Python字符串格式“g”实际意味着什么?
  17. 由于幸存者偏差,导致强变量在后续迭代中逐渐削弱甚至相反怎么办|文末有福利
  18. postgresql中patroni集群备库手动还原后,hac启动日志比主库多1
  19. 爬取网易财经中股票的历史交易数据
  20. au回声_回声按钮如何将Amazon Alexa技能提升到新水平

热门文章

  1. 计算机信息处理技术知识点,计算机信息处理技术基础知识.doc
  2. centos运行jar包需要的环境_CentOS 7.4下运行jar包
  3. 【学习笔记】8、 字符串的格式化
  4. SAP Varient Configuration Type SAP变量配置类型
  5. 用dialog创建一个可修改表
  6. cllocationmanager 获取不了 的原因_我的世界:天启之境如何获取“人鱼手链”?一段人鱼姬的爱情故事...
  7. android log耗性能吗,一个高性能的Android日志库
  8. 设计模式六大原则_设计模式—设计六大原则
  9. opencv 星空_opencv各种小例子
  10. 区间比较_Simulink(离散PIDamp;区间检测模块)+AURIX功能安全板过流比较电路+电机结构应用与工作原理学习网站...