我目前正在进行一项涉及使用Kinect进行物体检测和识别的大学项目。现在我使用MapDethFrameToColorSpace方法来协调rgb的深度。我相信问题是这个循环在这里
for (int i = 0; i < _depthData.Length; ++i)
{
ColorSpacePoint newpoint = cPoints[i];
if (!float.IsNegativeInfinity(newpoint.X) && !float.IsNegativeInfinity(newpoint.Y))
int colorX = (int)Math.Floor(newpoint.X + 0.5);
int colorY = (int)Math.Floor(newpoint.Y + 0.5);
if ((colorX >= 0) && (colorX < colorFrameDescription.Width) && (colorY >= 0) && (colorY < colorFrameDescription.Height))
{
int j = ((colorFrameDescription.Width * colorY) + colorX) * bytesPerPixel;
int newdepthpixel = i * 4;
displaypixel[newdepthpixel] = colorpixels[(j)]; //B
displaypixel[newdepthpixel + 1] = colorpixels[(j + 1)]; //G
displaypixel[newdepthpixel + 2] = colorpixels[(j + 1)]; //R
displaypixel[newdepthpixel + 3] = 255; //A*/
}
看起来索引不正确或者缺少像素/深度值,因为输出看起来是同一图像的倍数,但很小且x索引有限。 http://postimg.org/image/tecnvp1nx/
答案 0 :(得分:1)
让我猜一下:你的输出图像(displaypixel
)是1920x1080像素大吗? (虽然从你发布的链接,似乎是1829×948?)
那是你的问题。 MapDethFrameToColorSpace
返回每个深度像素的彩色图像中的相应位置。这意味着,您将获得512x424的值。将它们放入1920x1080图像意味着只有大约10%的图像被填充,而填充的部分将被混乱。
如果您输出的图像大于512x424像素,它应该会为您提供像this article中的第二个图像。
或者您可以将输出图像保持在1920x1080,但不是将一个像素放在另一个像素之后,还要计算放置像素的位置。所以改为做
int newdepthpixel = i * 4;
你需要做
int newdepthpixel = ((colorFrameDescription.Width * colorY) + colorX) * 4;
这会给你一张1920x1080的图像,但只填充512x424像素,中间有很多空间。