我正在玩新的 Kinect SDK v1.0.3.190。(stackoverflow 中的其他相关问题在以前的 kinect sdk 上)我从 Kinect 获得深度和颜色流。由于深度和 RGB 流是使用不同的传感器捕获的,因此两帧之间存在不对齐,如下所示。
只有 RGB
只有深度
深度和RGB
我需要对齐它们,并且有一个名为 MapDepthToColorImagePoint 的函数正是为此目的。但是,它似乎不起作用。这是一个同样混合(深度和映射颜色)的结果,下面是使用以下代码创建的
Parallel.For(0, this.depthFrameData.Length, i =>
{
int depthVal = this.depthFrameData[i] >> 3;
ColorImagePoint point = this.kinectSensor.MapDepthToColorImagePoint(DepthImageFormat.Resolution640x480Fps30, i / 640, i % 640, (short)depthVal, ColorImageFormat.RgbResolution640x480Fps30);
int baseIndex = Math.Max(0, Math.Min(this.videoBitmapData.Length - 4, (point.Y * 640 + point.X) * 4));
this.mappedBitmapData[baseIndex] = (byte)((this.videoBitmapData[baseIndex]));
this.mappedBitmapData[baseIndex + 1] = (byte)((this.videoBitmapData[baseIndex + 1]));
this.mappedBitmapData[baseIndex + 2] = (byte)((this.videoBitmapData[baseIndex + 2]));
});
在哪里
depthFrameData -> raw depth data (short array)
videoBitmapData -> raw image data (byte array)
mappedBitmapData -> expected result data (byte array)
参数的顺序、分辨率、数组大小是否正确(仔细检查)。
代码的结果是:
错位继续!更糟糕的是,使用 MapDepthToColorImagePoint 后的结果图像与原始图像完全相同。
如果有人可以帮助我找出我的错误或至少向我解释 MapDepthToColorImagePoint 的用途(假设我误解了它的功能),我将不胜感激?