指向某处时继续移动鼠标光标

时间:2012-11-25 12:36:34

标签: c# wpf mouse kinect

所以,我正在尝试创建一个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)。 我已经将第一个跟踪位置设置为屏幕的中心并尝试从那里开始。但是,即使使用像屏幕中心点这样的比较,鼠标仍然无法指向面部指向的方向。

1 个答案:

答案 0 :(得分:2)

您可以实现以下内容:

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