繁体   English   中英

Kinect V2坐标映射器的问题

[英]Issue with Kinect V2 Coordinate Mapper

我目前正在进行一个大学项目,其中涉及使用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/

让我猜测:您的输出图像( displaypixel )是1920x1080像素大吗? (尽管从您发布的链接来看,似乎是1829×948?)

那是你的问题。 MapDethFrameToColorSpace返回每个深度像素在彩色图像中的对应位置。 这意味着,您将获得512x424的值。 将其放入1920x1080图像中意味着仅填充了大约10%的图像,并且填充的部分将被弄乱。

如果你让你的输出图像512x424像素大,相反,它应该给你喜欢的第二图像上的这篇文章

或者,您可以将输出图像的分辨率保持在1920x1080,但不要将一个像素放置在另一个像素上,而是要计算放置像素的位置。 所以做

int newdepthpixel = i * 4;

你需要做

int newdepthpixel =  ((colorFrameDescription.Width * colorY) + colorX) * 4;

这将为您提供1920x1080的图像,但仅填充512x424像素,中间有很多空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM