资源简介

因为OpenNI可以获取到kinect的深度信息,而深度信息在手势识别中有很大用处,因此本文就来使用OpenNI自带的类来做简单的手势识别。识别的动作为4种,挥手,手移动,举手,往前推手。通过后面的实验可以发现,其实提供的类的效果非常不好。   开发环境:QtCreator2.5.1+OpenNI1.5.4.0+Qt4.8.2+OpenCV2.4.2

资源截图

代码片段和文件信息

#include 
#include 
#include 

using namespace xn;
using namespace std;

class COpenNI
{
public:
    ~COpenNI() {
        context.Release();//释放空间
    }
    bool Initial() {
        //初始化
        status = context.Init();
        if(CheckError(“Context initial failed!“)) {
            return false;
        }
        context.SetGlobalMirror(true);//设置镜像
        //产生图片node
        status = image_generator.Create(context);
        if(CheckError(“Create image generator  error!“)) {
            return false;
        }
        //产生深度node
        status = depth_generator.Create(context);
        if(CheckError(“Create depth generator  error!“)) {
            return false;
        }
        //视角校正
        status = depth_generator.GetAlternativeViewPointCap().SetViewPoint(image_generator);
        if(CheckError(“Can‘t set the alternative view point on depth generator!“)) {
            return false;
        }
        status = gesture_generator.Create(context);
        if(CheckError(“Create gesture generator error!“)) {
            return false;
        }
        /*添加手势识别的种类*/
        gesture_generator.AddGesture(“Wave“ NULL);
        gesture_generator.AddGesture(“click“ NULL);
        gesture_generator.AddGesture(“RaiseHand“ NULL);
        gesture_generator.AddGesture(“MovingHand“ NULL);
        return true;

    }

    bool Start() {
        status = context.StartGeneratingAll();
        if(CheckError(“Start generating error!“)) {
            return false;
        }
        return true;
    }

    bool UpdateData() {
        status = context.WaitNoneUpdateAll();
        if(CheckError(“Update date error!“)) {
            return false;
        }
        //获取数据
        image_generator.GetmetaData(image_metadata);
        depth_generator.GetmetaData(depth_metadata);

        return true;
    }

public:
    DepthmetaData depth_metadata;
    ImagemetaData image_metadata;
    GestureGenerator gesture_generator;//外部要对其进行回调函数的设置,因此将它设为public类型

private:
    //该函数返回真代表出现了错误,返回假代表正确
    bool CheckError(const char* error) {
        if(status != XN_STATUS_OK ) {
            QMessageBox::critical(NULL error xnGetStatusString(status));
            cerr << error << “: “ << xnGetStatusString( status ) << endl;
            return true;
        }
        return false;
    }

private:
    XnStatus    status;
    Context     context;
    DepthGenerator  depth_generator;
    ImageGenerator  image_generator;
};



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

     文件     351744  2012-10-02 08:41  Kinect+OpenNI学习笔记之5(使用OpenNI自带的类进行简单手势识别).pdf

     文件       2640  2012-10-01 22:28  hand_detect\copenni.cpp

     文件      62464  2012-10-02 00:33  hand_detect\debug\hand_detect.exe

     文件     526156  2012-10-02 00:33  hand_detect\debug\hand_detect.ilk

     文件        638  2012-10-02 00:33  hand_detect\debug\hand_detect.intermediate.manifest

     文件    2550784  2012-10-02 00:33  hand_detect\debug\hand_detect.pdb

     文件     310706  2012-10-02 00:33  hand_detect\debug\main.obj

     文件        992  2012-10-01 22:31  hand_detect\hand_detect.pro

     文件      17553  2012-10-02 08:41  hand_detect\hand_detect.pro.user

     文件       2548  2012-10-02 00:33  hand_detect\main.cpp

     文件       7059  2012-10-01 22:31  hand_detect\Makefile

     文件       6176  2012-10-01 22:31  hand_detect\Makefile.Debug

     文件       6166  2012-10-01 22:31  hand_detect\Makefile.Release

     文件    2174976  2012-10-02 00:33  hand_detect\vc100.pdb

     目录          0  2012-10-02 08:42  hand_detect\debug

     目录          0  2012-10-02 08:42  hand_detect\release

     目录          0  2012-10-02 08:42  hand_detect

----------- ---------  ---------- -----  ----

              6020602                    17


评论

共有 条评论