机器人视觉项目:视觉检测识别+机器人跟随(15)

本文介绍了一个机器人视觉项目,利用Windows SDK和Kinect设备进行人体骨骼追踪,实现机器人对人的精准跟随。通过深度学习技术解析摄像头数据,详细探讨了骨骼关键点识别与机器人运动控制策略。
摘要由CSDN通过智能技术生成
### kinect + winSDK代码
```

#include <windows.h>

#include <iostream> 

#include <NuiApi.h>

#include <opencv2/opencv.hpp>



using namespace std;

using namespace cv;



//通过传入关节点的位置,把骨骼画出来

void drawSkeleton(Mat &image, CvPoint pointSet[], int whichone);



int main(int argc, char *argv[])

{

    Mat skeletonImage;

    skeletonImage.create(240, 320, CV_8UC3);

    CvPoint skeletonPoint[NUI_SKELETON_COUNT][NUI_SKELETON_POSITION_COUNT]={cvPoint(0,0)};

    bool tracked[NUI_SKELETON_COUNT]={FALSE}; 



    //1、初始化NUI,注意这里是USES_SKELETON

    HRESULT hr = NuiInitialize(NUI_INITIALIZE_FLAG_USES_SKELETON); 

    if (FAILED(hr)) 

    { 

        cout<<"NuiInitialize failed"<<endl; 

        return hr; 

    } 



    //2、定义骨骼信号事件句柄 

    HANDLE skeletonEvent = CreateEvent( NULL, TRUE, FALSE, NULL );



    //3、打开骨骼跟踪事件

    hr = NuiSkeletonTrackingEnable( skeletonEvent, 0 ); 

    if( FAILED( hr ) )  

    { 

        cout<<"Could not open color image stream video"<<endl; 

        NuiShutdown(); 

        return hr; 

    }

    namedWindow("skeletonImage", CV_WINDOW_AUTOSIZE);



    //4、开始读取骨骼跟踪数据 

    while(1) 

    { 

        NUI_SKELETON_FRAME skeletonFrame = {0};  //骨骼帧的定义 

        bool bFoundSkeleton = false; 



        //4.1、无限等待新的数据,等到后返回

        if (WaitForSingleObject(skeletonEvent, INFINITE)==0) 

        { 

            //4.2、从刚才打开数据流的流句柄中得到该帧数据,读取到的数据地址存于skeletonFrame

            hr = NuiSkeletonGetNextFrame( 0, &skeletonFrame); 

            if (SUCCEEDED(hr))

            {

                //NUI_SKELETON_COUNT是检测到的骨骼数(即,跟踪到的人数)

                for( int i = 0 ; i < NUI_SKELETON_COUNT ; i++ ) 

                { 

                    NUI_SKELETON_TRACKING_STATE trackingState = skeletonFrame.SkeletonData[i].eTrackingState;

                    //4.3、Kinect最多检测六个人,但只能跟踪两个人的骨骼,再检查每个“人”(有可能是空,不是人)

                    //是否跟踪到了 

                    if( trackingState == NUI_SKELETON_TRACKED )

                    { 

                        bFoundSkeleton = true; 

                    } 

                } 

            }



             if( !bFoundSkeleton ) 

            { 

                continue; 

            } 



            //4.4、平滑骨骼帧,消除抖动

            NuiTransformSmooth(&skeletonFrame, NULL);

            skeletonImage.setTo(0);

            

            for( int i = 0 ; i < NUI_SKELETON_COUNT ; i++ )   

                {   

                    // Show skeleton only i
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值