OpenCV中Kinect的使用(2)

OpenCV中Kinect的使用(1),主要讲述OpenCV中关于Kinect接口(类 VideoCapture )的一些使用介绍。

类 VideoCapture 支持Kinect传感器。使用 VideoCapture 里的接口,可以从Kinect获取深度图,RGB图像和其他格式的输出,主要包括: 

1)来自深度传感器的数据:

  • OPENNI_DEPTH_MAP - 以毫米为单位的深度值 (CV_16UC1)
  • OPENNI_POINT_CLOUD_MAP - 以米为单位的XYZ点云 (CV_32FC3)
  • OPENNI_DISPARITY_MAP - 以像素为单位的视差 (CV_8UC1)
  • OPENNI_DISPARITY_MAP_32F - 以像素为单位的视差 (CV_32FC1)
  • OPENNI_VALID_DEPTH_MASK - 有效像素标志 (非遮挡,非影子区等) (CV_8UC1)

2)来自RGB图像传感器的数据:

  • OPENNI_BGR_IMAGE - 彩色图像 (CV_8UC3)
  • OPENNI_GRAY_IMAGE - 灰度图像 (CV_8UC1)

获取多个Kinect数据,可使用 VideoCapture::grab 和 VideoCapture::retrieve,例如:

1 cv::VideoCapture capture = VideoCapture( CV_CAP_OPENNI );
2 capture.set( CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION_ON, 1.0 );
3 capture.grab();
4 capture.retrieve( scene_img, CV_CAP_OPENNI_BGR_IMAGE );
5 capture.retrieve( depthImg, CV_CAP_OPENNI_DEPTH_MAP );
6 capture.retrieve( cloudImg, CV_CAP_OPENNI_POINT_CLOUD_MAP );   

其中,set用来设置Kinect数据属性,包括:

  • CV_CAP_OPENNI_IMAGE_GENERATOR – 读写图像传感器属性的标志;
  • CV_CAP_OPENNI_DEPTH_GENERATOR – 读写深度传感器属性的标志——此标志为默认值,如果这两个标志都没有设置,则为此标志。

当读写特定传感器属性时,必须用此标志指定传感器。如下属性可透过OpenNI接口支持:

1)图像传感器: 

  • CV_CAP_PROP_OPENNI_OUTPUT_MODE – 支持两种模式:缺省的 CV_CAP_OPENNI_VGA_30HZ (图像传感器以30FPS速度返回VGA分辨率的图像)
  • CV_CAP_OPENNI_SXGA_15HZ (图像传感器以15FPS速度返回SXGA分辨率的图像);深度传感器一直是VGA分辨率。

2)深度传感器:

  • CV_CAP_PROP_OPENNI_REGISTRATION – 此标志用来校准深度图,通过改变深度传感器的视点到图像传感器,这样两图中同一位置的像素表示同一物体(需将此标志设置为 "on"); 或者设置深度传感器的视点为其本来的视点(需将此标志设置为 "off")

3)一些”generator type + property”被定以为一个标志:

  • CV_CAP_OPENNI_IMAGE_GENERATOR_OUTPUT_MODE = CV_CAP_OPENNI_IMAGE_GENERATOR + CV_CAP_PROP_OPENNI_OUTPUT_MODE
  • CV_CAP_OPENNI_DEPTH_GENERATOR_BASELINE = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_BASELINE
  • CV_CAP_OPENNI_DEPTH_GENERATOR_FOCAL_LENGTH = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_FOCAL_LENGTH
  • CV_CAP_OPENNI_DEPTH_GENERATOR_REGISTRATION_ON = CV_CAP_OPENNI_DEPTH_GENERATOR + CV_CAP_PROP_OPENNI_REGISTRATION_ON

参考资料:

使用Kinect传感器

2013-10-28

原文地址:https://www.cnblogs.com/steven-blog/p/3392910.html