阅读(3918)
赞(9)
使用Creative Senz3D和其他英特尔感知计算SDK兼容的深度传感器
2017-09-29 11:30:17 更新
通过VideoCapture类支持与英特尔感知计算SDK兼容的深度传感器。通过使用VideoCapture的熟悉界面,可以检索深度图,RGB图像和其他一些输出格式。
为了在OpenCV中使用深度传感器,您应该执行以下初步步骤:
- 安装英特尔感知计算SDK(从这里http://www.intel.com/software/perceptual)。
- 通过在CMake中设置WITH_INTELPERC标志来配置具有英特尔感知计算SDK支持的OpenCV。如果英特尔感知计算SDK在安装文件夹中找到,OpenCV将使用英特尔感知计算SDK库(请参阅CMake日志中的INTELPERC状态)。如果CMake进程没有自动找到Intel Perceptual Computing SDK安装文件夹,用户应将相应的CMake变量INTELPERC_LIB_DIR和INTELPERC_INCLUDE_DIR更改为正确的值。
- 构建OpenCV。
VideoCapture可以检索以下数据:
- 深度发生器给出的数据:
- CAP_INTELPERC_DEPTH_MAP - 每个像素是一个16位整数。该值表示从物体到相机的XY平面或笛卡尔深度的距离。(CV_16UC1)
- CAP_INTELPERC_UVDEPTH_MAP - 每个像素包含0-1范围内的两个32位浮点值,表示深度坐标与颜色坐标的映射。(CV_32FC2)
- CAP_INTELPERC_IR_MAP - 每个像素是一个16位整数。该值表示反射激光束的强度。(CV_16UC1)
- RGB图像发生器提供的数据:
- 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;
由于支持两种类型的传感器数据生成器(图像生成器和深度生成器),因此需要使用两个标志来设置/获取所需生成器的属性:
- CAP_INTELPERC_IMAGE_GENERATOR - 用于访问图像生成器属性的标志。
- CAP_INTELPERC_DEPTH_GENERATOR - 用于访问深度生成器属性的标志。默认情况下假设该标志值,如果该属性的两个可能的值都未设置
有关更多信息,请参阅opencv / samples / cpp文件夹中使用intelperc_capture.cpp的示例。