Kinect:如何使用openni将深度坐标映射到世界坐标?

时间:2015-07-01 13:46:09

标签: c++ linux kinect point-cloud-library openni

我需要使用Openni将深度贴图映射到世界坐标。

所以我无法使用任何MSDN代码,例如" MapDepthToSkeletonPoint"或者" MapDepthToSkeletonPoint"或者" NuiTransformDepthImageToSkeleton"。

我尝试使用网址中的以下公式" http://www.tagwith.com/question_495583_kinect-from-color-space-to-world-coordinates" :

x = (u - principalPointX) / focalLengthX * d;
y = (z - principalPointY) / focalLengthY * d; 
z = d;

但我无法获得principalPointX和focalLengthX,尽管我尝试使用方法" getDepthCameraIntrinsics"但它给了我NaN的价值。

我希望有人可以帮助改变这种转变。

1 个答案:

答案 0 :(得分:0)

我找到了解决此问题的方法:通过OpenNIGrabber获取设备处理程序,然后获取深度输出模式,然后获取nXRes和nYRes,就像下面的代码一样

depth_principal_x = ((pcl::OpenNIGrabber*)capture_)->getDevice()->getDepthOutputMode().nXRes;
depth_principal_y = ((pcl::OpenNIGrabber*)capture_)->getDevice()->getDepthOutputMode().nYRes;
focal_length= ((pcl::OpenNIGrabber*)capture_)->getDevice()->getDepthFocalLength();

然后使用以上代码中指定的变量使用以下代码:

x = (u - depth_principal_x) / focal_length * d;
y = (z - depth_principal_y) / focal_length * d; 
z = d;

我希望这会有所帮助