参数和滤波代码示例

模组参数和滤波类型说明 已经介绍了模组相关的参数和滤波功能ID, 下面将说明如何设置及获取模组参数以及使能关闭模组的相关 滤波功能。

模组参数设置和读取

下面以设置和读取模组的曝光时间为例:

  • 进行参数设置:

    dmcam_param_item_t wparam;
    uint16_t intg_time = 100;                       //表示设置积分的大小 范围为0-1500
    memset(&wparam,0,sizeof(wparam));
    wparam.param_id = PARAM_INTG_TIME;      //表示设置的参数为积分时间
    wparam.param_val_len = sizeof(intg_time);
    wparam.param_val.intg.intg_us = intg_time;
    assert(dmcam_param_batch_set(dev,&wparam,1));   //调用API进行单个参数设置
    
    dmcam_param_item_t wparam;
    uint16_t intg_hdrtime = 700;            //表示设置HDR的积分时间的大小
    memset(&wparam,0,sizeof(wparam));
    wparam.param_id = PARAM_HDR_INTG_TIME;  //表示设置的参数为积分时间
    wparam.param_val_len = sizeof(intg_time);
    wparam.param_val.intg.intg_us = intg_hdrtime;
    assert(dmcam_param_batch_set(dev,&wparam,1));   //调用API进行单个参数设置
    

Tip

如果hdr的积分时间设置了不为0,则开启了模组的HDR模式,上面两个积分时间中,下面的HDR的积分要比上面的HDR设的大。

  • 进行参数的读取:

    dmcam_param_item_t rparam;
    memset(&rparam,0,sizeof(rparam));
    rparam.param_id = PARAM_INTG_TIME;      //表示要读取的参数项为积分时间
    assert(dmcam_param_batch_get(dev,&rparam,1));   //调用API获取单个参数
    

其他模组参数的设置获取参照上面积分时间的设置获取。

滤波功能开启和关闭

  • 像素校准,开启后用于深度数据的矫正:

    dmcam_filter_args_u witem;
    dmcam_filter_id_e filter_id = DMCAM_FILTER_ID_PIXEL_CALIB; //像素校准
    dmcam_filter_enable(dev,filter_id,&witem,sizeof(dmcam_filter_args_u));//开启像素校准
    dmcam_filter_disable(dev,DMCAM_FILTER_ID_PIXEL_CALIB); //关闭像素校准
    
  • 深度滤波,开启后用于对深度数据滤波:

    dmcam_filter_args_u witem;
    dmcam_filter_id_e filter_id = DMCAM_FILTER_ID_MEDIAN;   //深度滤波
    witem.median_ksize = 3; //深度滤波通常设置值
    dmcam_filter_enable(dev,filter_id,&witem,sizeof(dmcam_filter_args_u));//开启深度滤波
    dmcam_filter_disable(dev,DMCAM_FILTER_ID_MEDIAN);       //关闭深度滤波
    
  • 幅值滤波,开启后过滤质量差的点:

    dmcam_filter_args_u witem;
    dmcam_filter_id_e filter_id = DMCAM_FILTER_ID_AMP;      //最小幅值滤波
    witem.min_amp = 30;     //设置的最小幅值滤波的阈值
    dmcam_filter_enable(dev,filter_id,&witem,sizeof(dmcam_filter_args_u));//开启最小幅值滤波
    dmcam_filter_disable(dev,DMCAM_FILTER_ID_AMP);  //关闭最小幅值滤波
    
  • HDR模式,设置一大一小两个积分时间,确保同一个模组在测量远近不同的物体时不会过曝:

    dmcam_filter_args_u witem;
    dmcam_filter_id_e filter_id = DMCAM_FILTER_ID_HDR;      //HDR 模式
    witem.intg.intg_3d = 100;       //HDR 模式时小的曝光时间
    witem.intg.intg_3dhdr = 700;  //HDR 模式时大的曝光时间
    dmcam_filter_enable(dev,filter_id,&witem,sizeof(dmcam_filter_args_u)); //开启HDR模式
    

Tip

开启HDR模式的另一种方法是可以直接通过设置HDR的曝光时间不为0, 如上面设置积分的样例,两种方法都需要HDR的积分时间设置的比另一个积分时间大。

  • 自动积分时间,开启后根据被测物体的距离自动调整曝光时间大小:

    dmcam_filter_args_u witem;
    dmcam_filter_id_e filter_id = DMCAM_FILTER_ID_AUTO_INTG;        //自动曝光
    witem.sat_ratio = 5;//自动曝光时设置的值
    dmcam_filter_enable(dev,filter_id,&witem,sizeof(dmcam_filter_args_u));//开启自动曝光
    dmcam_filter_disable(dev,DMCAM_FILTER_ID_AUTO_INTG);    //关闭自动曝光
    
  • 多模组串扰消除,开启消除或者减小多模组同时开启时的串扰:

    dmcam_filter_args_u witem;
    dmcam_filter_id_e filter_id = DMCAM_FILTER_ID_SYNC_DELAY;        //串扰延时
    witem.sync_delay = 0;   //延时时间设为0时为随机时间
    dmcam_filter_enable(dev,filter_id,&witem,sizeof(dmcam_filter_args_u));//开启串扰延时
    dmcam_filter_disable(dev,DMCAM_FILTER_ID_SYNC_DELAY);   //关闭串扰延时
    
  • 运动模式0,帧格式要设置为2:

    dmcam_filter_args_u witem;
    dmcam_filter_id_e filter_id = DMCAM_FILTER_ID_SPORT_MODE;        //运动模式0
    dmcam_param_item_t wparam;
    uint32_t set_format = 2;        //表示要设置的帧格式为2
    memset(&wparam,0,sizeof(wparam));
    wparam.param_id = PARAM_FRAME_FORMAT;   //表示设置的参数为帧格式
    wparam.frame_format.format = set_format;        //设置的帧格式为2
    wparam.param_val_len = sizeof(set_format);
    assert(dmcam_param_batch_set(dev,&wparam,1));   //调用API进行帧格式参数设置
    witem.sport_mode = 0;   //设置运动模式为0
    dmcam_filter_enable(dev,filter_id,&witem,sizeof(dmcam_filter_args_u));//开启运动模式0
    dmcam_filter_disable(dev,DMCAM_FILTER_ID_SPORT_MODE);//关闭运动模式0
    
  • 运动模式1,帧格式要设置为4:

    dmcam_filter_args_u witem;
    dmcam_filter_id_e filter_id = DMCAM_FILTER_ID_SPORT_MODE;        //运动模式1
    dmcam_param_item_t wparam;
    uint32_t set_format = 4;        //表示要设置的帧格式为4
    memset(&wparam,0,sizeof(wparam));
    wparam.param_id = PARAM_FRAME_FORMAT;   //表示设置的参数为帧格式
    wparam.frame_format.format = set_format;        //设置的帧格式为4
    wparam.param_val_len = sizeof(set_format);
    assert(dmcam_param_batch_set(dev,&wparam,1));   //调用API进行帧格式参数设置
    witem.sport_mode = 1;   //设置运动模式为1
    dmcam_filter_enable(dev,filter_id,&witem,sizeof(dmcam_filter_args_u));//开启运动模式1
    //关闭运动模式1时,帧格式要先恢复到2
    set_format = 2;         //帧格式要恢复设置为2
    wparam.frame_format.format = set_format;        //设置的帧格式的值为2
    wparam.param_id = PARAM_FRAME_FORMAT;   //表示设置的参数为帧格式
    wparam.param_val_len = sizeof(set_format);
    assert(dmcam_param_batch_set(dev,&wparam,1));   //调用API进行帧格式参数设置2
    dmcam_filter_disable(dev,DMCAM_FILTER_ID_SPORT_MODE);//关闭运动模式1