资源简介
这里提供一个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\li
文件 14216 2017-10-25 08:42 MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.tlog\li
文件 2220 2017-10-25 08:42 MyKinectTouch\MyKinectTouch\Debug\MyKinectTouch.tlog\li
文件 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个文件信息
- 上一篇:人工智能的贪食蛇
- 下一篇:乒乓球的RGB565颜色识别,与当前图片中心线的夹角
相关资源
- 五子棋小游戏选择棋盘、棋子;双方
- c++模拟磁盘调度算法FCFS;SSTF;SCAN;
- KinectV2彩色图片尺寸变换代码变换后与
- C语言 键盘记录
- 无向图的邻接矩阵压缩存储.cpp
- 数据结构—图书馆管理系统C++编写
- VTK三维球体测量
- C++卫星定位程序--通过卫星星历确定卫
- 课程设计 分段存储管理的分配与回收
- 从键盘上输入一串字符包括字母、数
- Kinectv2 __MFC
- C语言:powell鲍威尔法;
- Kinectv2_深度图和骨骼图源码
- 点云数据滤波------数学形态学
- c语言实现远程控制鼠标
- 二叉树遍历
- UR机械臂与PC通讯程序socket2018_03_16
- DTW算法 C++实现
- 唯一可译码判决准则 1使用的编程:
- 基于单片机的LED彩灯控制器设计
- 中国大学MOOC-翁恺-C语言程序设计习题
- IAR中文版教程 IAR教程
- 白平衡算法,包含灰色世界法,完美
- vc6.0编写的SOM神经网络聚类
- 自学VC++2010;用ADO方法在ACCESS2010数据
- Visual C++ 6.0高级编程技术-OpenGL篇 源代
- 迷宫问题数据结构 C++编写
- 串口调试助手源代码(MFC+SComm)
- MFC图片操作(PRO5_PNGDlg.cpp)
- C语言的数据结构实现,配套课程是浙
评论
共有 条评论