接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
参考资料:
2013-10-28