我需要使用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的价值。
我希望有人可以帮助改变这种转变。
答案 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;
我希望这会有所帮助