1. 程式人生 >實用技巧 >其它 >Intel Realsense D系列深度相機 使用C++設定手動/自動調整曝光

Intel Realsense D系列深度相機 使用C++設定手動/自動調整曝光


使用自動曝光:

sen.set_option(RS2_OPTION_AUTO_EXPOSURE_PRIORITY, true);

使用手動曝光:

sen.set_option(RS2_OPTION_EXPOSURE, camera_exposure);
//camera_exposure即為曝光引數

另,若想獲取當前相機的曝光引數可以使用:

sen.get_option(RS2_OPTION_EXPOSURE)

附上呼叫Demo,由於是沒有imu的型號所以只拉了倆個視訊流然後用opencv顯示:

#include <librealsense2/rs.hpp>
#include <opencv2/opencv.hpp>
#include <iostream>

const int camera_frame_width  = 640;
const int camera_frame_height = 480;
const int camera_fps          = 60;

int camera_exposure     = 200;

rs2::pipeline         pipe;

void InitCamera(){
    rs2::context          ctx;
    rs2::config           cfg;
    rs2::sensor           sen;
    rs2::pipeline_profile profile;
    auto list = ctx.query_devices();
    if (list.size() <= 0){
        //exit(0);
        throw std::runtime_error("No device detected. Is it plugged in?");
    }
    rs2::device dev = list.front();

    cfg.enable_stream(RS2_STREAM_COLOR, camera_frame_width, camera_frame_height, RS2_FORMAT_BGR8, camera_fps);//向配置新增所需的流
    cfg.enable_stream(RS2_STREAM_DEPTH, camera_frame_width, camera_frame_height, RS2_FORMAT_Z16,  camera_fps);

    pipe = rs2::pipeline();
    profile = pipe.start(cfg);
    sen = pipe.get_active_profile().get_device().query_sensors()[1];

    if (camera_exposure < 0){
        sen.set_option(RS2_OPTION_AUTO_EXPOSURE_PRIORITY, true);
        std::cout << "自動曝光 引數為[" << sen.get_option(RS2_OPTION_EXPOSURE) << "]" << std::endl;
    }
    else{
        sen.set_option(RS2_OPTION_EXPOSURE, camera_exposure);
        std::cout << "手動曝光 引數為[" << sen.get_option(RS2_OPTION_EXPOSURE) << "]" << std::endl;
    }

    auto depth_stream=profile.get_stream(RS2_STREAM_DEPTH).as<rs2::video_stream_profile>();
    auto color_stream=profile.get_stream(RS2_STREAM_COLOR).as<rs2::video_stream_profile>();
}

int main() {
    InitCamera();
    rs2::frameset frames;
    while (true){
        frames = pipe.wait_for_frames();//等待所有配置的流生成框架

        rs2::align align_to_color(RS2_STREAM_COLOR);
        frames = align_to_color.process(frames);

        rs2::frame color_frame = frames.get_color_frame();
        rs2::frame depth_frame = frames.get_depth_frame();

        cv::Mat frame_color(cv::Size(camera_frame_width, camera_frame_height), CV_8UC3, (void*)color_frame.get_data(), cv::Mat::AUTO_STEP);
        cv::Mat frame_depth(cv::Size(camera_frame_width, camera_frame_height), CV_16U,  (void*)depth_frame.get_data(), cv::Mat::AUTO_STEP);

        cv::imshow("color", frame_color);
        cv::imshow("depth", frame_depth);

        cv::waitKey(1);

    }
    return 0;
}

自己最近寫realsense的時候發現這方面的中文資料著實算不上多,順帶機翻了官方文件中定義的控制引數表格,希望有所幫助:)文件連結我會貼在最後。

RS2_OPTION_BACKLIGHT_COMPENSATION

啟用/禁用彩色背光補償

RS2_OPTION_BRIGHTNESS

彩色影象亮度

RS2_OPTION_CONTRAST

彩色影象對比度

RS2_OPTION_EXPOSURE

控制彩色相機的曝光時間。 設定任何值將禁用自動曝光

RS2_OPTION_GAIN

彩色影象增益

RS2_OPTION_GAMMA

彩色影象伽瑪設定

RS2_OPTION_HUE

彩色影象色調

RS2_OPTION_SATURATION

彩色影象飽和度設定

RS2_OPTION_SHARPNESS

彩色影象清晰度設定

RS2_OPTION_WHITE_BALANCE

控制彩色影象的白平衡。 設定任何值將禁用自動白平衡

RS2_OPTION_ENABLE_AUTO_EXPOSURE

啟用/禁用彩色影象自動曝光

RS2_OPTION_ENABLE_AUTO_WHITE_BALANCE

啟用/禁用彩色影象自動白平衡

RS2_OPTION_VISUAL_PRESET

提供對深度相機的幾組推薦選項預設的訪問

RS2_OPTION_LASER_POWER

鐳射發射器的功率,0表示投影儀關閉

RS2_OPTION_ACCURACY

設定每幀投影的圖案數量。 準確度值越高,投射的模式就越多。 增加模式的數量有助於實現更好的準確性。 請注意,此控制元件正在影響深度 FPS

RS2_OPTION_MOTION_RANGE

運動與範圍的權衡,較低的值允許更好的運動靈敏度和較高的值允許更好的深度範圍

RS2_OPTION_FILTER_OPTION

設定過濾器以應用於每個深度幀。 每個過濾器都根據應用要求進行了優化

RS2_OPTION_CONFIDENCE_THRESHOLD

深度演算法管道使用的置信度閾值,用於設定畫素將獲得有效範圍還是將標記為無效範圍

RS2_OPTION_EMITTER_ENABLED

發射器選擇:0 – 禁用所有發射器。 1 – 啟用鐳射。 2 – 啟用自動鐳射。 3 – 啟用 LED。

RS2_OPTION_FRAMES_QUEUE_SIZE

每個流允許使用者保留的幀數。 試圖保持更多幀將導致丟幀。

RS2_OPTION_TOTAL_FRAME_DROPS

從所有流中檢測到的丟幀總數

RS2_OPTION_AUTO_EXPOSURE_MODE

自動曝光模式:靜態、防閃爍和混合

RS2_OPTION_POWER_LINE_FREQUENCY

電源線頻率控制防閃爍關閉/50Hz/60Hz/自動

RS2_OPTION_ASIC_TEMPERATURE

當前 Asic 溫度

RS2_OPTION_ERROR_POLLING_ENABLED

禁用錯誤處理

RS2_OPTION_PROJECTOR_TEMPERATURE

當前投影儀溫度

RS2_OPTION_OUTPUT_TRIGGER_ENABLED

在每個深度幀上啟用/禁用從相機輸出到任何外部裝置的觸發器

RS2_OPTION_MOTION_MODULE_TEMPERATURE

當前運動模組溫度

RS2_OPTION_DEPTH_UNITS

單個深度單位表示的米數

RS2_OPTION_ENABLE_MOTION_CORRECTION

啟用/禁用運動資料的自動校正

RS2_OPTION_AUTO_EXPOSURE_PRIORITY

允許感測器根據照明條件動態調整幀速率

RS2_OPTION_COLOR_SCHEME

資料視覺化的配色方案

RS2_OPTION_HISTOGRAM_EQUALIZATION_ENABLED

對深度資料進行直方圖均衡後處理

RS2_OPTION_MIN_DISTANCE

到目標的最小距離

RS2_OPTION_MAX_DISTANCE

到目標的最大距離

RS2_OPTION_TEXTURE_SOURCE

紋理對映流唯一 ID

RS2_OPTION_FILTER_MAGNITUDE

2D濾鏡效果。 具體解釋在過濾器的上下文中給出

RS2_OPTION_FILTER_SMOOTH_ALPHA

2D 濾波器引數控制平滑的權重/半徑。

RS2_OPTION_FILTER_SMOOTH_DELTA

二維濾波器範圍/有效閾值

RS2_OPTION_HOLES_FILL

通過適當的孔填充增強深度資料後處理

RS2_OPTION_STEREO_BASELINE

基於立體的深度相機中第一個和第二個成像器之間的距離(以毫米為單位)

RS2_OPTION_AUTO_EXPOSURE_CONVERGE_STEP

允許在自動曝光演算法中動態調整目標曝光的收斂步長值

RS2_OPTION_INTER_CAM_SYNC_MODE

實施相機間硬體同步模式。 適用於 D400/L500/捲簾 SKU

RS2_OPTION_STREAM_FILTER

選擇要處理的流

RS2_OPTION_STREAM_FORMAT_FILTER

選擇要處理的流格式

RS2_OPTION_STREAM_INDEX_FILTER

選擇要處理的流索引

RS2_OPTION_EMITTER_ON_OFF

支援時,此選項使相機每幀切換髮射器狀態。 0 表示禁用,1 表示啟用

RS2_OPTION_ZERO_ORDER_POINT_X

已棄用!!! - 零序點 x

RS2_OPTION_ZERO_ORDER_POINT_Y

已棄用!!! - 零訂單點 y

RS2_OPTION_LLD_TEMPERATURE

LDD溫度

RS2_OPTION_MC_TEMPERATURE

MC溫度

RS2_OPTION_MA_TEMPERATURE

平均溫度

RS2_OPTION_HARDWARE_PRESET

硬體流配置

RS2_OPTION_GLOBAL_TIME_ENABLED

禁用全球時間

RS2_OPTION_APD_TEMPERATURE

APD溫度

RS2_OPTION_ENABLE_MAPPING

啟用內部地圖

RS2_OPTION_ENABLE_RELOCALIZATION

啟用基於外觀的重定位

RS2_OPTION_ENABLE_POSE_JUMPING

啟用位置跳躍

RS2_OPTION_ENABLE_DYNAMIC_CALIBRATION

啟用動態校準

RS2_OPTION_DEPTH_OFFSET

從感測器到深度原點的偏移量(以毫米為單位)

RS2_OPTION_LED_POWER

LED(發光二極體)的功率,0表示LED關閉

RS2_OPTION_ZERO_ORDER_ENABLED

已棄用! - 切換零階模式

RS2_OPTION_ENABLE_MAP_PRESERVATION

開始時保留以前的地圖

RS2_OPTION_FREEFALL_DETECTION_ENABLED

檢測到自由落體時啟用/禁用感測器關閉(預設開啟)

RS2_OPTION_AVALANCHE_PHOTO_DIODE

更改接收器中雪崩光電二極體的曝光時間

RS2_OPTION_POST_PROCESSING_SHARPENING

更改後處理影象中的銳化量

RS2_OPTION_PRE_PROCESSING_SHARPENING

更改預處理影象中的銳化量

RS2_OPTION_NOISE_FILTERING

控制邊緣和背景噪聲

RS2_OPTION_INVALIDATION_BYPASS

啟用畫素失效

RS2_OPTION_AMBIENT_LIGHT

已棄用! - 改用 RS2_OPTION_DIGITAL_GAIN。

RS2_OPTION_DIGITAL_GAIN

更改深度數字增益,請參見 rs2_digital_gain 的值

RS2_OPTION_SENSOR_MODE

解析度模式:有關值,請參見 rs2_sensor_mode

RS2_OPTION_EMITTER_ALWAYS_ON

持續啟用鐳射開啟(僅限 GS SKU)

RS2_OPTION_THERMAL_COMPENSATION

選定 D400 SKU 的深度熱補償

RS2_OPTION_TRIGGER_CAMERA_ACCURACY_HEALTH

通過定期校準啟用深度和顏色幀同步,以實現正確對齊

RS2_OPTION_RESET_CAMERA_ACCURACY_HEALTH
RS2_OPTION_HOST_PERFORMANCE

設定主機效能模式以優化裝置設定,以便主機能夠跟上工作負載,例如 USB 事務粒度,將選項設定為低效能主機會導致更大的 USB 事務大小並減少事務數量,從而在主機相對較弱的情況下提高效能和穩定性與工作量相比

RS2_OPTION_HDR_ENABLED

啟用/禁用 HDR

RS2_OPTION_SEQUENCE_NAME

HDR 序列名稱

RS2_OPTION_SEQUENCE_SIZE

HDR 序列大小

RS2_OPTION_SEQUENCE_ID

HDR 序列 ID - 0 不是 HDR; HDR 配置的序列 ID 從 1 開始

RS2_OPTION_HUMIDITY_TEMPERATURE

溼度溫度 [攝氏度]

RS2_OPTION_ENABLE_MAX_USABLE_RANGE

給定場景中的環境光量,開啟/關閉最大可用深度感測器範圍

RS2_OPTION_ALTERNATE_IR

開啟/關閉交替紅外,當啟用交替紅外時,紅外影象保持深度相關的幅度。

RS2_OPTION_NOISE_ESTIMATION

噪聲估計 - 指示 IR 影象上的噪聲

RS2_OPTION_ENABLE_IR_REFLECTIVITY

啟用資料收集以計算 IR 畫素反射率

RS2_OPTION_AUTO_EXPOSURE_LIMIT

以微秒為單位設定並獲取自動曝光限制。 預設值為 0,表示全曝光範圍。 如果請求的曝光限制大於幀時間,它將在執行時設定為幀時間。 設定將在下一個流會話之前生效。

RS2_OPTION_AUTO_GAIN_LIMIT

設定和獲取範圍從 16 到 248 的自動增益限制。預設值為 0,表示完全增益。 如果請求的增益限制小於 16,則設定為 16。如果請求的增益限制大於 248,則設定為 248。設定將在下一個流會話之前生效。

RS2_OPTION_COUNT

列舉值的數量。 不是有效輸入:旨在用於 for 迴圈。

RealSense官方文件連結:librealsense2: rs_option.h File Reference

Intel Realsense D系列深度相機 使用C++設定手動/自動調整曝光

https://docs.ros.org/en/kinetic/api/librealsense2/html/rs__option_8h.html#a8b9c011f705cfab20c7eaaa7a26040e2a1b190100d8ca308207b8661d5cd7e049librealsense2: TinyCThread API Reference

Intel Realsense D系列深度相機 使用C++設定手動/自動調整曝光

https://docs.ros.org/en/kinetic/api/librealsense2/html/index.html