日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

D435 pyrealsense 如何实时获取摄像头的曝光值?get_frame_metadata(rs.frame_metadata_value.actual_exposure)成功了(更新UWP)

發(fā)布時間:2025/3/20 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 D435 pyrealsense 如何实时获取摄像头的曝光值?get_frame_metadata(rs.frame_metadata_value.actual_exposure)成功了(更新UWP) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 200123

根據(jù) Intel Realsense D435 測試攝像頭在不同曝光值下的幀生成時間(防止曝光時間過長導(dǎo)致fps下降)auto_exposure_priority(沒成功),使用獲取傳感器sensor然后獲取實時自動曝光曝光值的方法失敗了,于是嘗試尋找其他辦法,在github上又詢問了官方人員,熱心網(wǎng)友 radfordi給出了一個方案:

long long get_exposure_time(const rs2::frame &f) {if (f.supports_frame_metadata(RS2_FRAME_METADATA_ACTUAL_EXPOSURE))return f.get_frame_metadata(RS2_FRAME_METADATA_ACTUAL_EXPOSURE);elsereturn 0; // unknown }

引用自:How to get the current exposure value of the camera auto exposure mode with code?
#5596

該方案通過獲取幀的元數(shù)據(jù)來獲取實際曝光值,

代碼不是python的,嘗試轉(zhuǎn)成python

def get_exposure_time(color_frame):if color_frame.supports_frame_metadata(rs.frame_metadata_value.actual_exposure):return color_frame.get_frame_metadata(rs.frame_metadata_value.actual_exposure)else:return 0

完整代碼:

# -*- coding: utf-8 -*- """ @File : 200110_測試攝像頭實時獲取曝光值.py @Time : 2020/1/10 0:57 @Author : Dontla @Email : sxana@qq.com @Software: PyCharm """import time import numpy as np import pyrealsense2 as rs import cv2ctx = rs.context()for dev in ctx.query_devices():# 先將設(shè)備的序列號放進(jìn)一個變量里,免得在下面for循環(huán)里訪問設(shè)備的信息過多(雖然不知道它會不會每次都重新訪問)dev_serial = dev.get_info(rs.camera_info.serial_number)# 匹配序列號,重置我們需重置的特定攝像頭(注意兩個for循環(huán)順序,哪個在外哪個在內(nèi)很重要,不然會導(dǎo)致剛重置的攝像頭又被訪問導(dǎo)致報錯)if '838212073161' == dev_serial:dev.hardware_reset()# 像下面這條語句居然不會報錯,不是剛剛才重置了dev嗎?莫非區(qū)別在于沒有通過for循環(huán)ctx.query_devices()去訪問?# 是不是剛重置后可以通過ctx.query_devices()去查看有這個設(shè)備,但是卻沒有存儲設(shè)備地址?如果是這樣,# 也就能夠解釋為啥能夠通過len(ctx.query_devices())函數(shù)獲取設(shè)備數(shù)量,但訪問序列號等信息就會報錯的原因了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]def get_exposure_time(color_frame):if color_frame.supports_frame_metadata(rs.frame_metadata_value.actual_exposure):return color_frame.get_frame_metadata(rs.frame_metadata_value.actual_exposure)else:return 0while True:frames = pipeline.wait_for_frames()color_frame = frames.get_color_frame()depth_frame = frames.get_depth_frame()print(color_frame.get_frame_metadata(rs.frame_metadata_value.actual_exposure))color_image = np.asanyarray(color_frame.get_data())cv2.imshow('win', color_image)cv2.waitKey(1)# cv2.imwrite('{:.3f}.jpg'.format(time.time()), color_image)

運(yùn)行后直接報錯了:

D:\20191031_tensorflow_yolov3\python\python.exe D:/2_pycharm測試項目/200108_測試獲取Intel_Realsense_options參數(shù)/200110_測試攝像頭實時獲取曝光值.py 攝像頭838212073161初始化成功 Traceback (most recent call last):File "D:/2_pycharm測試項目/200108_測試獲取Intel_Realsense_options參數(shù)/200110_測試攝像頭實時獲取曝光值.py", line 52, in <module>print(color_frame.get_frame_metadata(rs.frame_metadata_value.actual_exposure)) RuntimeError: metadata not availableProcess finished with exit code 1

不知啥情況!等待后續(xù)解答

200123

今天github的官方客服人員終于回復(fù)我了,他們建議我在獲取值之前先檢測一下是否支持,,

我重新將代碼跑了一遍,這回可以獲取了,見鬼!

近乎同樣的代碼,為啥上次不行,這次又好了??

代碼:

# -*- coding: utf-8 -*- """ @File : 200110_測試攝像頭實時獲取曝光值.py @Time : 2020/1/10 0:57 @Author : Dontla @Email : sxana@qq.com @Software: PyCharm """import time import numpy as np import pyrealsense2 as rs import cv2ctx = rs.context()for dev in ctx.query_devices():# 先將設(shè)備的序列號放進(jìn)一個變量里,免得在下面for循環(huán)里訪問設(shè)備的信息過多(雖然不知道它會不會每次都重新訪問)dev_serial = dev.get_info(rs.camera_info.serial_number)# 匹配序列號,重置我們需重置的特定攝像頭(注意兩個for循環(huán)順序,哪個在外哪個在內(nèi)很重要,不然會導(dǎo)致剛重置的攝像頭又被訪問導(dǎo)致報錯)if '838212073161' == dev_serial:dev.hardware_reset()# 像下面這條語句居然不會報錯,不是剛剛才重置了dev嗎?莫非區(qū)別在于沒有通過for循環(huán)ctx.query_devices()去訪問?# 是不是剛重置后可以通過ctx.query_devices()去查看有這個設(shè)備,但是卻沒有存儲設(shè)備地址?如果是這樣,# 也就能夠解釋為啥能夠通過len(ctx.query_devices())函數(shù)獲取設(shè)備數(shù)量,但訪問序列號等信息就會報錯的原因了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]def get_exposure_time(color_frame):if color_frame.supports_frame_metadata(rs.frame_metadata_value.actual_exposure):return color_frame.get_frame_metadata(rs.frame_metadata_value.actual_exposure)else:return 0while True:frames = pipeline.wait_for_frames()color_frame = frames.get_color_frame()depth_frame = frames.get_depth_frame()print(color_frame.get_frame_metadata(rs.frame_metadata_value.actual_exposure))color_image = np.asanyarray(color_frame.get_data())cv2.imshow('win', color_image)cv2.waitKey(1)# cv2.imwrite('{:.3f}.jpg'.format(time.time()), color_image)


用上次的代碼跑,也是成功的,見鬼!!

也許是更新了Intel Realsense SDK或UWP導(dǎo)致的??(有眾多數(shù)據(jù)支持更新UWP能獲取元數(shù)據(jù))

從不能獲取元數(shù)據(jù),到現(xiàn)在可以獲得了??

參考文章1:How to get the current exposure value of the camera auto exposure mode with code? #5596

參考文章2:Hint that metadata support requires OS level settings/changes #5669

參考文章3:Enable metadata with a single click on Windows #5678

總結(jié)

以上是生活随笔為你收集整理的D435 pyrealsense 如何实时获取摄像头的曝光值?get_frame_metadata(rs.frame_metadata_value.actual_exposure)成功了(更新UWP)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。