【问题标题】:How to Move Cursor with Kinect in Portrait view?如何在纵向视图中使用 Kinect 移动光标?
【发布时间】:2014-11-08 06:19:05
【问题描述】:

我正在尝试开发一个可以用手移动光标的应用程序。我已经用我的手编写了完整的代码及其移动光标,但范围非常有限,当我向上移动手时,光标不会相应移动。我已经使用以下代码抓取了手点并设置了鼠标位置。

DepthImagePoint handPt;

Joint hand = skl.Joints[JointType.HandRight]; 

handPt = sensor.CoordinateMapper.MapSkeletonPointToDepthPoint(hand.Position, DepthImageFormat.Resolution640x480Fps30);

Mouse.setPosition(HandPt.X, handPt.Y)

请告诉我如何在纵向视图中正确移动鼠标

【问题讨论】:

    标签: c# xna kinect xna-4.0


    【解决方案1】:

    我已经这样做了..这对我有用

    Joint hand = skl.Joints[JointType.HandRight]; 
    
    CameraSpacePoint position = hand.Position;
    
    DepthSpacePoint handPt = sensor.CoordinateMapper.MapCameraPointToDepthSpace(position);
    
    Point relativePoint = new Point(handPt.X * (1280 / sensor.DepthFrameSource.FrameDescription.Width), handPt.Y * (720 / sensor.DepthFrameSource.FrameDescription.Height));
    
    Mouse.setPosition(relativePoint.X, relativePoint.Y);
    

    【讨论】:

      【解决方案2】:

      我认为您的问题可能是您没有将光标的位置映射到保持光标的容器上的等效位置或屏幕分辨率。 Kinect 的图像分辨率通常为 640x480px,而您的屏幕显然要大得多。我已将该行添加到您的代码中:

      DepthImagePoint handPt;
      
      Joint hand = skl.Joints[JointType.HandRight]; 
      
      handPt = sensor.CoordinateMapper.MapSkeletonPointToDepthPoint(hand.Position, DepthImageFormat.Resolution640x480Fps30);
      
      Point mappedPoint = new Point(handPt.X * (width / sensor.DepthStream.FrameWidth), handPt.Y * (height / sensor.DepthStream.FrameHeight));
      
      Mouse.setPosition(mappedPoint.X, mappedPoint.Y)
      

      其中宽度和高度是容器/屏幕的宽度和高度。 如果这对你有用,请告诉我。

      【讨论】:

      • 非常感谢您的回复,我的屏幕宽度为 720,高度为 1280,我尝试了您的代码,但它也无法正常工作。光标仍然不在我的手中。它工作得更好,但仍然在 x 轴方向和 y 轴极端产生问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 2011-12-27
      • 2021-11-02
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      相关资源
      最近更新 更多