阅读(3918) (9)

使用Creative Senz3D和其他英特尔感知计算SDK兼容的深度传感器

2017-09-29 11:30:17 更新

通过VideoCapture类支持与英特尔感知计算SDK兼容的深度传感器。通过使用VideoCapture的熟悉界面,可以检索深度图,RGB图像和其他一些输出格式。

为了在OpenCV中使用深度传感器,您应该执行以下初步步骤:

  1. 安装英特尔感知计算SDK(从这里http://www.intel.com/software/perceptual)。
  2. 通过在CMake中设置WITH_INTELPERC标志来配置具有英特尔感知计算SDK支持的OpenCV。如果英特尔感知计算SDK在安装文件夹中找到,OpenCV将使用英特尔感知计算SDK库(请参阅CMake日志中的INTELPERC状态)。如果CMake进程没有自动找到Intel Perceptual Computing SDK安装文件夹,用户应将相应的CMake变量INTELPERC_LIB_DIR和INTELPERC_INCLUDE_DIR更改为正确的值。
  3. 构建OpenCV。

VideoCapture可以检索以下数据:

  • 深度发生器给出的数据:

    1. CAP_INTELPERC_DEPTH_MAP - 每个像素是一个16位整数。该值表示从物体到相机的XY平面或笛卡尔深度的距离。(CV_16UC1)
    2. CAP_INTELPERC_UVDEPTH_MAP - 每个像素包含0-1范围内的两个32位浮点值,表示深度坐标与颜色坐标的映射。(CV_32FC2)
    3. CAP_INTELPERC_IR_MAP - 每个像素是一个16位整数。该值表示反射激光束的强度。(CV_16UC1)

    • RGB图像发生器提供的数据:
    1. CAP_INTELPERC_IMAGE - 彩色图像。(CV_8UC3)

    为了从深度传感器获取深度图使用VideoCapture :: operator >>,例如:

    VideoCapture capture( CAP_INTELPERC );
    for(;;)
    {
        Mat depthMap;
        capture >> depthMap;
        if( waitKey( 30 ) >= 0 )
            break;
    }

    要获取几个数据地图,请使用VideoCapture :: grab和VideoCapture :: retrieve,例如:

    VideoCapture capture(CAP_INTELPERC);
    for(;;)
    {
        Mat depthMap;
        Mat image;
        Mat irImage;
        capture.grab();
        capture.retrieve( depthMap, CAP_INTELPERC_DEPTH_MAP );
        capture.retrieve(    image, CAP_INTELPERC_IMAGE );
        capture.retrieve(  irImage, CAP_INTELPERC_IR_MAP);
        if( waitKey( 30 ) >= 0 )
            break;
    }

    为了设置和获取传感器数据生成器的某些属性,请分别使用VideoCapture :: set和VideoCapture :: get方法,例如:

    VideoCapture capture( CAP_INTELPERC );
    capture.set( CAP_INTELPERC_DEPTH_GENERATOR | CAP_PROP_INTELPERC_PROFILE_IDX, 0 );
    cout << "FPS    " << capture.get( CAP_INTELPERC_DEPTH_GENERATOR+CAP_PROP_FPS ) << endl;

    由于支持两种类型的传感器数据生成器(图像生成器和深度生成器),因此需要使用两个标志来设置/获取所需生成器的属性:

    1. CAP_INTELPERC_IMAGE_GENERATOR - 用于访问图像生成器属性的标志。
    2. CAP_INTELPERC_DEPTH_GENERATOR - 用于访问深度生成器属性的标志。默认情况下假设该标志值,如果该属性的两个可能的值都未设置

    有关更多信息,请参阅opencv / samples / cpp文件夹中使用intelperc_capture.cpp的示例。