基于Opencv的手势识别


基于Opencv凸包检测的手势识别,使用训练好的XML文件,可以识别0,1,2,3,4,5,6,8等手势。
资源截图
代码片段和文件信息
#include “math.h“
#include 
#include    
#include                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
#include   
#include   
#include         
#include   

//多线程
#include 
using namespace cv;
using namespace std;
DWORD WINAPI myThread(char* _addr);

float ComputeAngle(float float float float);
int fingerSignal[10][2] = { 0 };
int centerToUnity[2] = { 0 };
int fingerNum = 0;
int gesture = -1;

//获取手势信息,在unity的c#脚本中被调用
extern “C“ _declspec(dllexport) void _stdcall GetGesture(int _signal[10][2] int _centerToUnity[2] int &_fingerNum int &_gesture)
{
_fingerNum = fingerNum;
for (int i = 0; i < 10; i++)
{
_signal[i][0] = 0;
_signal[i][1] = 0;
}
for (int i = 0; i < _fingerNum; i++)
{
_signal[i][0] = fingerSignal[i][0];
_signal[i][1] = fingerSignal[i][1];
}
_centerToUnity[0] = centerToUnity[0];
_centerToUnity[1] = centerToUnity[1];
_gesture = gesture;
}

//开启一个线程
extern “C“ _declspec(dllexport) void _stdcall StartDevice(char* addr)
{
HANDLE myHandle = CreateThread(NULL 0 (LPTHREAD_START_ROUTINE)myThread addr 0 NULL);//创建线程    
}

//手势识别主要线程函数
DWORD WINAPI myThread(char* addr)
{
int delay = 1;
char c;
int frameNum = -1; // frame counter
VideoCapture captRefrnc(0);
captRefrnc.set(CV_CAP_PROP_frame_WIDTH 640);
captRefrnc.set(CV_CAP_PROP_frame_HEIGHT 480);

if (!captRefrnc.isOpened())
{
return -1;
cout << “Opening camera failed!“;
}

Size refS = Size((int)captRefrnc.get(CV_CAP_PROP_frame_WIDTH)
(int)captRefrnc.get(CV_CAP_PROP_frame_HEIGHT));


bool bHandFlag = false;

const char* WIN_SRC = “Source“;
const char* WIN_RESULT = “Result“;

namedWindow(WIN_SRC CV_WINDOW_AUTOSIZE);
namedWindow(WIN_RESULT CV_WINDOW_AUTOSIZE);

Mat frame; // 读取视频帧序列
Mat gray; //灰度图像
Mat segmented; //二值化阈值分割
Mat frameHSV; // hsv空间
Mat mask(frame.rows frame.cols CV_8UC1); // 2值掩膜
Mat dst(frame); // 输出图像

vector< vector > contours; // 存储轮廓信息
vector< vector > f

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    ..A..H.     35840  2018-01-27 17:35  gestureDistinguish.vsgestureDistinguishv14.suo

     文件       7388  2018-01-22 17:06  gestureDistinguishgestureDistinguishgestureDistinguish.vcxproj

     文件        945  2018-01-22 17:06  gestureDistinguishgestureDistinguishgestureDistinguish.vcxproj.filters

     文件       9281  2018-01-27 16:55  gestureDistinguishgestureDistinguishmain.cpp

     文件        764  2018-01-23 21:12  gestureDistinguishgestureDistinguishx64DebuggestureD.7CD43DD9.tlogCL.command.1.tlog

     文件      51790  2018-01-23 21:12  gestureDistinguishgestureDistinguishx64DebuggestureD.7CD43DD9.tlogCL.read.1.tlog

     文件        784  2018-01-23 21:12  gestureDistinguishgestureDistinguishx64DebuggestureD.7CD43DD9.tlogCL.write.1.tlog

     文件        178  2018-01-23 21:12  gestureDistinguishgestureDistinguishx64DebuggestureD.7CD43DD9.tloggestureDistinguish.lastbuildstate

     文件       9254  2018-01-23 21:12  gestureDistinguishgestureDistinguishx64DebuggestureD.7CD43DD9.tloggestureDistinguish.write.1u.tlog

     文件       1660  2018-01-23 21:12  gestureDistinguishgestureDistinguishx64DebuggestureD.7CD43DD9.tloglink.command.1.tlog

     文件       3398  2018-01-23 21:12  gestureDistinguishgestureDistinguishx64DebuggestureD.7CD43DD9.tloglink.read.1.tlog

     文件        770  2018-01-23 21:12  gestureDistinguishgestureDistinguishx64DebuggestureD.7CD43DD9.tloglink.write.1.tlog

     文件       3830  2018-01-23 21:12  gestureDistinguishgestureDistinguishx64DebuggestureDistinguish.log

     文件     809255  2018-01-23 21:12  gestureDistinguishgestureDistinguishx64Debugmain.obj

     文件    1674240  2018-01-23 21:12  gestureDistinguishgestureDistinguishx64Debugvc140.idb

     文件    2387968  2018-01-23 21:12  gestureDistinguishgestureDistinguishx64Debugvc140.pdb

     文件   49479680  2018-01-27 17:35  gestureDistinguishgestureDistinguish.sdf

     文件       1336  2018-01-23 19:54  gestureDistinguishgestureDistinguish.sln

     文件     184832  2018-01-23 21:12  gestureDistinguishx64DebuggestureDistinguish.exe

     文件        853  2018-01-23 20:57  gestureDistinguishx64DebuggestureDistinguish.exp

     文件    1350236  2018-01-23 21:12  gestureDistinguishx64DebuggestureDistinguish.ilk

     文件       2120  2018-01-23 20:57  gestureDistinguishx64DebuggestureDistinguish.lib

     文件    3772416  2018-01-23 21:12  gestureDistinguishx64DebuggestureDistinguish.pdb

     目录          0  2018-01-27 19:43  gestureDistinguishgestureDistinguishx64DebuggestureD.7CD43DD9.tlog

     目录          0  2018-01-27 19:43  gestureDistinguish.vsgestureDistinguishv14

     目录          0  2018-01-27 19:43  gestureDistinguishgestureDistinguishx64Debug

     目录          0  2018-01-27 19:43  gestureDistinguish.vsgestureDistinguish

     目录          0  2018-01-27 19:43  gestureDistinguishgestureDistinguishx64

     目录          0  2018-01-27 19:43  gestureDistinguishx64Debug

    ...D.H.         0  2018-01-27 19:43  gestureDistinguish.vs

............此处省略6个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)