You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xbox One Kinect竖置使用:BodyScanner-Kinect代码修改咨询

针对BodyScanner-Kinect竖置Kinect的修改方案

核心修改点:帧旋转、坐标映射调整、骨骼坐标修正

以下是具体的代码修改步骤,对应仓库中的常见文件结构:


1. 彩色/深度帧的显示旋转

找到处理帧显示的主逻辑文件(通常是MainWindow.xaml.cs),在彩色帧和深度帧的转换代码后添加旋转处理:

彩色帧修改示例:

// 原代码:转换彩色帧为WriteableBitmap
using (var colorBitmap = new WriteableBitmap(colorFrame.FrameDescription.Width, colorFrame.FrameDescription.Height, 96.0, 96.0, PixelFormats.Bgr32, null))
{
    colorFrame.CopyConvertedFrameDataToIntPtr(colorBitmap.BackBuffer, (uint)(colorFrame.FrameDescription.Width * colorFrame.FrameDescription.Height * 4), ColorImageFormat.Bgra);
    colorBitmap.Lock();
    colorBitmap.AddDirtyRect(new Int32Rect(0, 0, colorBitmap.PixelWidth, colorBitmap.PixelHeight));
    colorBitmap.Unlock();

    // 新增:旋转90度(根据实际摆放方向调整角度,比如逆时针用270)
    var rotatedColorBitmap = new TransformedBitmap(colorBitmap, new RotateTransform(90));
    // 将旋转后的图像赋值给UI控件
    ColorImage.Source = rotatedColorBitmap;
}

深度帧修改示例:

同样在深度帧转换完成后添加旋转逻辑,确保深度画面和彩色画面同步竖置:

// 原深度帧转换代码...
var rotatedDepthBitmap = new TransformedBitmap(depthBitmap, new RotateTransform(90));
DepthImage.Source = rotatedDepthBitmap;

2. 坐标映射修正(关键:解决深度-彩色对齐问题)

Kinect默认的CoordinateMapper是基于横置摄像头的,竖置后X/Y坐标互换,需要修改坐标映射逻辑(在帧处理类或主窗口代码中):

// 原代码:获取深度转彩色的坐标
// var colorPoint = _coordinateMapper.MapDepthPointToColorPoint(depthFrame.Format, depthPoint, colorFrame.Format);

// 修改后:先交换深度点的X/Y,再映射,最后交换彩色点的X/Y
var rotatedDepthPoint = new DepthPoint 
{ 
    X = depthPoint.Y,  // 横置时的高度变为竖置后的宽度
    Y = depthPoint.X,  // 横置时的宽度变为竖置后的高度
    Depth = depthPoint.Depth 
};
// 修正坐标范围(深度帧原尺寸512x424,竖置后变为424x512)
rotatedDepthPoint.X = Math.Clamp(rotatedDepthPoint.X, 0, colorFrame.FrameDescription.Height - 1);
rotatedDepthPoint.Y = Math.Clamp(rotatedDepthPoint.Y, 0, colorFrame.FrameDescription.Width - 1);

var colorPoint = _coordinateMapper.MapDepthPointToColorPoint(depthFrame.Format, rotatedDepthPoint, colorFrame.Format);

// 交换彩色点的X/Y,适配竖置后的画面
colorPoint = new ColorPoint 
{ 
    X = colorPoint.Y, 
    Y = colorPoint.X 
};
// 修正彩色点坐标范围
colorPoint.X = Math.Clamp(colorPoint.X, 0, colorFrame.FrameDescription.Width - 1);
colorPoint.Y = Math.Clamp(colorPoint.Y, 0, colorFrame.FrameDescription.Height - 1);

3. 骨骼跟踪坐标修正(如果项目用到骨骼)

如果仓库包含人体骨骼跟踪逻辑,需要修正关节的相机空间坐标,适配竖置后的坐标系:

// 原代码:获取关节原始坐标
// var jointPos = body.Joints[JointType.SpineBase].Position;

// 修改后:交换X/Y并调整坐标方向(根据旋转方向调整符号,顺时针90度示例)
var originalPos = body.Joints[JointType.SpineBase].Position;
var rotatedPos = new CameraSpacePoint
{
    X = originalPos.Y,
    Y = -originalPos.X,  // 翻转Y轴适配竖置后的坐标系
    Z = originalPos.Z
};

4. 需要修改的文件定位

根据BodyScanner-Kinect仓库结构,主要修改以下文件:

  • MainWindow.xaml.cs:帧读取、显示旋转的核心逻辑
  • 若存在FrameProcessor.cs/DepthProcessor.cs:坐标映射修正的逻辑
  • 若存在BodyTracker.cs:骨骼坐标修正的逻辑

测试时先验证画面显示是否正确竖置,再检查深度与彩色帧的对齐情况,最后调整骨骼跟踪的坐标适配。

内容的提问来源于stack exchange,提问作者Ali Kariminejad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:53:30