【问题标题】:Keep moving mouse cursor while pointing somewhere在指向某处时保持移动鼠标光标
【发布时间】:2012-11-25 12:36:33
【问题描述】:

所以,我正在尝试创建一个 Kinect 应用程序,其中鼠标由头部的移动控制。

        if (faceFrame.TrackSuccessful)
        {               
            var xBase = System.Windows.Forms.Screen.AllScreens[0].Bounds.Width;
            var yBase = System.Windows.Forms.Screen.AllScreens[0].Bounds.Height;
            var xCentroTela = xBase / 2;
            var yCentroTela = yBase / 2;
            var xInicial = Convert.ToInt32(pontosFace[41].X);
            var yInicial = Convert.ToInt32(pontosFace[41].Y);

            if (flagPosicao == 0)
            {
                SetCursorPos(xCentroTela, yCentroTela);

                flagPosicao = 1;
            }

            //Works
            int topofscreen = ((100 * yBase) * yInicial) / (50 * yCentroTela);
            int leftofscreen = ((100 * xBase) * xInicial) / (50 * xCentroTela);


            leftofscreen = leftofscreen - xCentroTela;
            topofscreen = topofscreen - yCentroTela;

            SetCursorPos(leftofscreen, topofscreen);

            Thread.Sleep(1);

            txty.Text = Convert.ToString(topofscreen);
            txtx.Text = Convert.ToString(leftofscreen);
        }

我已经设法控制它,根据 Kinect 跟踪的面部给定点的确切位置,但是如果人坐着,这会将鼠标的移动限制在一个非常小的区域内。这只有在人们不停地在房间周围移动他的头时才有效。

我的问题是:有没有办法动态设置鼠标光标的位置?换句话说,我不想将它设置为我的确切位置。我想将其设置为跟踪点指向的位置。例如,如果我将头移到左上角并停止,鼠标应该继续朝那个方向移动。

或者有没有办法将跟踪点范围扩大到更大的区域?

更新 我已经更新了代码并进行了一些改进。现在,我将鼠标光标设置到屏幕中心并获取面部的初始跟踪点。现在我正试图发现从那里去哪里。

更新 #2 现在我已经设法跟踪屏幕的中心点(xCentroTelayCentroTela)并确定了该点的第一个跟踪位置(xInicialyInicial)。 有了这个,我将第一个跟踪位置设置为屏幕的中心并尝试从那里开始。但是即使使用像屏幕中心点这样的比较,仍然无法将鼠标指向面部指向的方向。

【问题讨论】:

  • 当你说“鼠标应该继续移动”时,我很困惑。你真的想让鼠标在头部停止时继续移动吗?如果不是,则应该将输出标准化为屏幕分辨率。
  • @EvilClosetMonkey 是的。这就是发生的事情。 kinect 跟踪我脸上的确切点位置并将鼠标移动到该位置。但这覆盖了屏幕的一小部分区域。我想要的是 kinect 跟踪我脸上的点所指向的方向,并将鼠标移动到该方向,直到我将头移动到初始位置。当我这样做时,鼠标停止移动。这有意义吗?

标签: c# wpf mouse kinect


【解决方案1】:

你可以这样实现:

如果用户将你的头向右移动一点,你会做nothing,但如果他再移动一点,你就开始向右移动鼠标并加速它(将位移乘以一个因子),并且仅当用户将头部转到原始位置时才停止。 换句话说,您需要考虑光标周围的区域,如果用户查看该区域,则不会发生任何事情,如果用户走出该区域,则鼠标开始移动。 记住移动区域时光标保持在中心。

【讨论】:

  • 嘿!是的,这就是我的想法,但是在尝试实现它时遇到了很多麻烦。我已经设法确定了屏幕的中心点(xBaseyBase)。使用我的代码,我可以跟踪用户脸上的点的确切位置并将其显示在屏幕上,但我仍然无法找到如何获取该点并将其移动到它指向的方向的方法。
  • Brasileiro na área :) 我将测试您的代码并发布更多建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多