![](/img/trans.png)
[英]Kinect v2 obtain x,y,z from mouse click using Color image and Depth Image c#
[英]Kinect v2 color depth mapping using C#
我正在尝试使用sdk中的coordinateMapper函数将深度贴图映射到颜色空间。 但是,我收到的输出不是我预期的,它似乎具有较小的宽高比,并且图像似乎是镜像的。
以下是我使用的代码:
depthWidth = depthFrameDescription.Width;
depthHeight = depthFrameDescription.Height;
var colorDesc = colorFrame.FrameDescription;
int colorWidth = colorDesc.Width;
int colorHeight = colorDesc.Height;
int size = colorWidth * colorHeight;
DepthSpacePoint[] colSpacePoints = new DepthSpacePoint[colorWidth * colorHeight];
using (KinectBuffer depthFrameData = depthFrame.LockImageBuffer())
using (KinectBuffer colorBuffer = colorFrame.LockRawImageBuffer())
{
this.bitmap.Lock();
if ((colorWidth == this.bitmap.PixelWidth) && (colorHeight == this.bitmap.PixelHeight))
{
byte[] colorFrameData = new byte[size * bytesPerPixel];
// Map the values here
ushort [] frameData = new ushort[depthWidth * depthHeight];
depthFrame.CopyFrameDataToArray(frameData);
coordinateMapper.MapColorFrameToDepthSpace(frameData, colSpacePoints);
this.bitmap.WritePixels(new Int32Rect(0, 0, colorWidth, colorHeight), colSpacePoints, colorWidth * bytesPerPixel, 0);
this.bitmap.AddDirtyRect(new Int32Rect(0, 0, this.bitmap.PixelWidth, this.bitmap.PixelHeight));
}
this.bitmap.Unlock();
}
this.bitmapBackBufferSize = (uint)![enter image description here][1]((this.bitmap.BackBufferStride * (this.bitmap.PixelHeight - 1)) + (this.bitmap.PixelWidth * this.bytesPerPixel));
isBitmapLocked = true;
如果您尝试将深度框架的坐标映射到颜色框架,则缺少一步。
这是一个链接,可能更好地解释我可以: http : //www.bryancook.net/2014/03/mapping-between-kinect-color-and-depth.html
但在您使用的情况下
coordinateMapper.MapColorFrameToDepthSpace(frameData, colSpacePoints);
不使用输出如何使用它。 此函数的输出包含颜色空间和深度空间中存在的所有点。 所以为了显示这些,你想迭代你的colSpacePoints并对每个结果做一些事情,在我链接的例子中,它被称为_colorSpacePoints,所以你可以看看他用它做了什么。
我被困在尝试做类似于你正在做的事情,但几天后我发现如何正确使用映射。 如果您需要有关问题的更多帮助,请告诉我您要在WriteableBitmap中显示的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.