这里提供一个kinectV2控制鼠标的C++版本程序,同时包含Chengaotan版本的C#程序供参考,Kinect 自身可实现三种手势的识别,拳头,剪刀,和布,从而可控制鼠标做不同的事情;本人已将其运用到体感游戏打飞机上,效果不错,附上打飞机体感游戏博客地址:http://blog.csdn.net/qq_34609108/article/details/78082849
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-10-25 08:42 MyKinectTouch
目录 0 2017-10-25 08:14 MyKinectTouchDebug
文件 73728 2017-10-25 08:42 MyKinectTouchDebugMyKinectTouch.exe
文件 528872 2017-10-25 08:42 MyKinectTouchDebugMyKinectTouch.ilk
文件 2289664 2017-10-25 08:42 MyKinectTouchDebugMyKinectTouch.pdb
目录 0 2017-10-25 08:42 MyKinectTouchMyKinectTouch
目录 0 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebug
文件 199670 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugKinectControl.obj
文件 39080 2017-09-19 16:29 MyKinectTouchMyKinectTouchDebugMouseControl.obj
文件 2462 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.log
文件 170589 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.obj
目录 0 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.tlog
文件 128334 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.tlogCL.read.1.tlog
文件 5728 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.tlogCL.write.1.tlog
文件 174 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.tlogMyKinectTouch.lastbuildstate
文件 5152 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.tlogcl.command.1.tlog
文件 9502 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.tloglink.command.1.tlog
文件 14216 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.tloglink.read.1.tlog
文件 2220 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.tloglink.write.1.tlog
文件 1739776 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugvc120.idb
文件 1667072 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugvc120.pdb
文件 6584 2017-10-25 08:42 MyKinectTouchMyKinectTouchKinectControl.cpp
文件 1892 2017-10-25 08:42 MyKinectTouchMyKinectTouchKinectControl.h
文件 1368 2017-09-18 14:49 MyKinectTouchMyKinectTouchMyKinectTouch.aps
文件 677 2017-10-25 08:26 MyKinectTouchMyKinectTouchMyKinectTouch.cpp
文件 4222 2017-09-19 16:33 MyKinectTouchMyKinectTouchMyKinectTouch.vcxproj
文件 1177 2017-09-19 16:33 MyKinectTouchMyKinectTouchMyKinectTouch.vcxproj.filters
文件 34406400 2017-10-25 08:42 MyKinectTouchMyKinectTouch.sdf
文件 985 2017-09-18 14:43 MyKinectTouchMyKinectTouch.sln
文件 38912 2017-10-25 08:42 MyKinectTouchMyKinectTouch.v12.suo
目录 0 2017-10-25 08:14 MyKinectTouchWpfApplication1 C#版应用程序
............此处省略53个文件信息
#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 MyKinectTouchDebug
文件 73728 2017-10-25 08:42 MyKinectTouchDebugMyKinectTouch.exe
文件 528872 2017-10-25 08:42 MyKinectTouchDebugMyKinectTouch.ilk
文件 2289664 2017-10-25 08:42 MyKinectTouchDebugMyKinectTouch.pdb
目录 0 2017-10-25 08:42 MyKinectTouchMyKinectTouch
目录 0 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebug
文件 199670 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugKinectControl.obj
文件 39080 2017-09-19 16:29 MyKinectTouchMyKinectTouchDebugMouseControl.obj
文件 2462 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.log
文件 170589 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.obj
目录 0 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.tlog
文件 128334 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.tlogCL.read.1.tlog
文件 5728 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.tlogCL.write.1.tlog
文件 174 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.tlogMyKinectTouch.lastbuildstate
文件 5152 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.tlogcl.command.1.tlog
文件 9502 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.tlogli
文件 14216 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.tlogli
文件 2220 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugMyKinectTouch.tlogli
文件 1739776 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugvc120.idb
文件 1667072 2017-10-25 08:42 MyKinectTouchMyKinectTouchDebugvc120.pdb
文件 6584 2017-10-25 08:42 MyKinectTouchMyKinectTouchKinectControl.cpp
文件 1892 2017-10-25 08:42 MyKinectTouchMyKinectTouchKinectControl.h
文件 1368 2017-09-18 14:49 MyKinectTouchMyKinectTouchMyKinectTouch.aps
文件 677 2017-10-25 08:26 MyKinectTouchMyKinectTouchMyKinectTouch.cpp
文件 4222 2017-09-19 16:33 MyKinectTouchMyKinectTouchMyKinectTouch.vcxproj
文件 1177 2017-09-19 16:33 MyKinectTouchMyKinectTouchMyKinectTouch.vcxproj.filters
文件 34406400 2017-10-25 08:42 MyKinectTouchMyKinectTouch.sdf
文件 985 2017-09-18 14:43 MyKinectTouchMyKinectTouch.sln
文件 38912 2017-10-25 08:42 MyKinectTouchMyKinectTouch.v12.suo
目录 0 2017-10-25 08:14 MyKinectTouchWpfApplication1 C#版应用程序
............此处省略53个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)