如何在C++中从Kinect中获取XYZ坐标

How to get XYZ coordinates from Kinect in C++

本文关键字:获取 XYZ 坐标 Kinect 中从 C++      更新时间:2023-10-16

我是kinect的新手。我正在Visual Studio中使用c++进行一个增强现实项目。我正在寻找一种通过kinect获得所有点坐标(X,Y,Z)的方法,但我很难弄清楚。有人能帮我吗?如何从深度流中获取点?

我正在为xbox 360使用Kinect V1。

假设Kinect v2:最简单的方法是使用ICoordinateMapper::MapDepthFrameToCameraSpace(请参阅此处的文档)。

IKinectSensor *sensor;
UINT16 *depthPoints;
...
// initialize the sensor and grab a depth frame and get depthPoints
...
const int nPixels = 512 * 424;
std::vector<CameraSpacePoint> cameraPoints;
cameraPoints.resize(nPixels);
ICoordinateMapper *cm = dev->get_CoordinateMapper();
if (cm != nullptr) {
  cm->MapDepthFrameToCameraSpace(nPixels, &depthPoints[0], nPixels, &cameraPoints[0]);
  cm->Release();
}
// use XYZs in cameraPoints

请注意,只有当您与设备有实时连接时,这才有效。如果您之前已将原始深度帧保存到磁盘并在另一台计算机上读回,请考虑使用ICoordinateMapper函数GetDepthCameraIntrinsicsGetDepthFrameToCameraSpaceTable,并将该数据与帧一起保存,以允许脱机转换为XYZ。

编辑:

易于入门:

  • Kinect v1:尝试使用Kinect Common Bridge v1和CoordinateMapper::MapDepthFrameToSkeletonFrame方法
  • Kinect v2:尝试使用Kinect Common Bridge v2和KCBMapDepthFrameToCameraSpace功能