我是 kinect 新手。我正在使用 C++ 在 Visual Studio 中开发一个增强现实项目。 我正在寻找一种通过 kinect 获取所有点坐标(X、Y、Z)的方法,但我很难弄清楚。任何人都可以帮我吗? 我如何从深度流中获取点数?
我在 xbox 360 上使用 Kinect V1。
最佳答案
假设使用 Kinect v2:最简单的方法是使用 ICoordinateMapper::MapDepthFrameToCameraSpace
(参见文档 here)。
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
函数 GetDepthCameraIntrinsics
或 GetDepthFrameToCameraSpaceTable
并将该数据与帧一起保存以允许离线转换为 XYZ。
编辑:
为了轻松入门:
- Kinect v1:尝试使用 Kinect Common Bridge v1和 CoordinateMapper::MapDepthFrameToSkeletonFrame方法。
- Kinect v2:尝试使用 Kinect Common Bridge v2和 KCBMapDepthFrameToCameraSpace功能。
关于c++ - 如何在 C++ 中从 Kinect 获取 XYZ 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33645442/