• 大小: 11.44MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-06-19
  • 语言: C/C++
  • 标签: KinectV2    鼠标控制  

资源简介

这里提供一个kinectV2控制鼠标的C++版本程序,同时包含Chengaotan版本的C#程序供参考,Kinect 自身可实现三种手势的识别,拳头,剪刀,和布,从而可控制鼠标做不同的事情;本人已将其运用到体感游戏打飞机上,效果不错,附上打飞机体感游戏博客地址:http://blog.csdn.net/qq_34609108/article/details/78082849

资源截图

代码片段和文件信息

#include “KinectControl.h“
#include 
#include 

int KinectControl::lassoCount = 0;

KinectControl::KinectControl():   //各种类型变量的初始化

mouseSensitivity ( MOUSE_SENSITIVITY)
timeRequired (TIME_REQUIRED)
doClick (DO_CLICK)
useGripGesture (USE_GRIP_GESTURE)
cursorSmoothing ( CURSOR_SMOOTHING)
{
alreadyTrackedPos = false; 
wasLeftGrip = false; 
wasRightGrip = false; 
lasso = false;
lastCurPos = { 0 0 };
m_pSensor           = nullptr;
m_pframeDescription = nullptr;
m_pBodySource = nullptr;
m_pBodyReader = nullptr;
m_pBodyframe  = nullptr;

// 获取屏幕的大小与尺寸
 screenWidth = GetSystemMetrics(SM_CXSCREEN);
 screenHeight = GetSystemMetrics(SM_CYSCREEN);

}
HRESULT KinectControl::InitializeDefaultSensor()
{
//kinect Body帧的准备,直接开好Reader
HRESULT hr;
hr = GetDefaultKinectSensor(&m_pSensor);
if (FAILED(hr))
{
return hr;
}
if (m_pSensor)
{
hr = m_pSensor->Open();
m_pSensor->get_BodyframeSource(&m_pBodySource);
m_pBodySource->OpenReader(&m_pBodyReader);
}
return hr;
}

//主要数据更新区域
void  KinectControl::Update()
{
//因为每0.1秒循环,用lasso 也就是手势剪刀来标记 鼠标双击 , 一次点击按下,要2秒等待,实现下一次点击,否则剪刀手势下一直点击
if (lasso) lassoCount++;
if (lassoCount > 20)
 {
 lassoCount = 0;
 lasso = false;
 }


while (m_pBodyReader->AcquireLatestframe(&m_pBodyframe) != S_OK); //读取Body数据
int bodyBufferSize = 0;
m_pBodySource->get_BodyCount(&bodyBufferSize);
IBody ** bodyArray = new IBody *[bodyBufferSize];
for (int i = 0; i < bodyBufferSize; i++)
{
bodyArray[i] = nullptr;
}
m_pBodyframe->GetAndRefreshBodyData(bodyBufferSize bodyArray);

for (int i = 0; i < bodyBufferSize; i++)  //遍历6个人
{
BOOLEAN result = false;
if (bodyArray[i]->get_IsTracked(&result) == S_OK && result)
{
Joint jointArray[JointType_Count]; //将关节点输出,正式开始处理
bodyArray[i]->GetJoints(JointType_Count jointArray);
if (jointArray[JointType_Neck].TrackingState != TrackingState_Tracked ||
jointArray[JointType_Head].TrackingState != TrackingState_Tracked)
continue;

CameraSpacePoint handLeft = jointArray[JointType_HandLeft].Position;    //左手掌
CameraSpacePoint spinebase = jointArray[JointType_Spinebase].Position;  //脊椎基部
CameraSpacePoint handRight = jointArray[JointType_HandRight].Position;  //右手掌


if (handRight.Z - spinebase.Z < -0.15f) // if right hand lift forward
{
/*如果是右手按此计算。我们不使用肩膀的位置作为参考,因为导致右肩膀通常是在举起的右手后面,位置将被推断和不稳定。
因为脊柱的基础是在右手的左边,我们加0.05f使其更加接近权*/

float x = handRight.X - spinebase.X + 0.05f;
/* hand y calculated by this. ss spine base is way lower than right hand we plus 0.51f to make it
* higer the value 0.51f is worked out by testing for a several times you can set it as another one you like. */
float y = spinebase.Y - handRight.Y + 0.51f;
// get current cursor position
POINT curPos;
GetCursorPos(&curPos);
// smoothing for using should be 0 - 0.95f. Th

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-10-25 08:42  MyKinectTouch\
     目录           0  2017-10-25 08:14  MyKinectTouch\Debug\
     文件       73728  2017-10-25 08:42  MyKinectTouch\Debug\MyKinectTouch.exe
     文件      528872  2017-10-25 08:42  MyKinectTouch\Debug\MyKinectTouch.ilk
     文件     2289664  2017-10-25 08:42  MyKinectTouch\Debug\MyKinectTouch.pdb
     目录           0  2017-10-25 08:42  MyKinectTouch\MyKinectTouch\
     目录           0  2017-10-25 08:42  MyKinectTouch\MyKinectTouch\Debug\
     文件      199670  2017-10-25 08:42  MyKinectTouch\MyKinectTouch\Debug\KinectControl.obj
     文件       39080  2017-09-19 16:29  MyKinectTouch\MyKinectTouch\Debug\MouseControl.obj
     文件        2462  2017-10-25 08:42  MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.log
     文件      170589  2017-10-25 08:42  MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.obj
     目录           0  2017-10-25 08:42  MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.tlog\
     文件      128334  2017-10-25 08:42  MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.tlog\CL.read.1.tlog
     文件        5728  2017-10-25 08:42  MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.tlog\CL.write.1.tlog
     文件         174  2017-10-25 08:42  MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.tlog\MyKinectTouch.lastbuildstate
     文件        5152  2017-10-25 08:42  MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.tlog\cl.command.1.tlog
     文件        9502  2017-10-25 08:42  MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.tlog\link.command.1.tlog
     文件       14216  2017-10-25 08:42  MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.tlog\link.read.1.tlog
     文件        2220  2017-10-25 08:42  MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.tlog\link.write.1.tlog
     文件     1739776  2017-10-25 08:42  MyKinectTouch\MyKinectTouch\Debug\vc120.idb
     文件     1667072  2017-10-25 08:42  MyKinectTouch\MyKinectTouch\Debug\vc120.pdb
     文件        6584  2017-10-25 08:42  MyKinectTouch\MyKinectTouch\KinectControl.cpp
     文件        1892  2017-10-25 08:42  MyKinectTouch\MyKinectTouch\KinectControl.h
     文件        1368  2017-09-18 14:49  MyKinectTouch\MyKinectTouch\MyKinectTouch.aps
     文件         677  2017-10-25 08:26  MyKinectTouch\MyKinectTouch\MyKinectTouch.cpp
     文件        4222  2017-09-19 16:33  MyKinectTouch\MyKinectTouch\MyKinectTouch.vcxproj
     文件        1177  2017-09-19 16:33  MyKinectTouch\MyKinectTouch\MyKinectTouch.vcxproj.filters
     文件    34406400  2017-10-25 08:42  MyKinectTouch\MyKinectTouch.sdf
     文件         985  2017-09-18 14:43  MyKinectTouch\MyKinectTouch.sln
     文件       38912  2017-10-25 08:42  MyKinectTouch\MyKinectTouch.v12.suo
     目录           0  2017-10-25 08:14  MyKinectTouch\WpfApplication1 C#版应用程序\
............此处省略53个文件信息

评论

共有 条评论