• 大小: 10KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-11
  • 语言: C/C++
  • 标签: Kinect  2.0  骨骼点  

资源简介

Kinect 2.0 骨骼显示及画出骨骼结合opencv 显示。

资源截图

代码片段和文件信息

#include “myKinect.h“
#include 

/// Initializes the default Kinect sensor
HRESULT CBodyBasics::InitializeDefaultSensor()
{
//用于判断每次读取操作的成功与否
HRESULT hr;

//搜索kinect
hr = GetDefaultKinectSensor(&m_pKinectSensor);
if (FAILED(hr)){
return hr;
}

//找到kinect设备
if (m_pKinectSensor)
{
// Initialize the Kinect and get coordinate mapper and the body reader
IBodyframeSource* pBodyframeSource = NULL;//读取骨架
IDepthframeSource* pDepthframeSource = NULL;//读取深度信息
IBodyIndexframeSource* pBodyIndexframeSource = NULL;//读取背景二值图

//打开kinect
hr = m_pKinectSensor->Open();

//coordinatemapper
if (SUCCEEDED(hr))
{
hr = m_pKinectSensor->get_CoordinateMapper(&m_pCoordinateMapper);
}

//bodyframe
if (SUCCEEDED(hr))
{
hr = m_pKinectSensor->get_BodyframeSource(&pBodyframeSource);
}

if (SUCCEEDED(hr))
{
hr = pBodyframeSource->OpenReader(&m_pBodyframeReader);
}

//depth frame
if (SUCCEEDED(hr)){
hr = m_pKinectSensor->get_DepthframeSource(&pDepthframeSource);
}

if (SUCCEEDED(hr)){
hr = pDepthframeSource->OpenReader(&m_pDepthframeReader);
}

//body index frame
if (SUCCEEDED(hr)){
hr = m_pKinectSensor->get_BodyIndexframeSource(&pBodyIndexframeSource);
}

if (SUCCEEDED(hr)){
hr = pBodyIndexframeSource->OpenReader(&m_pBodyIndexframeReader);
}

SafeRelease(pBodyframeSource);
SafeRelease(pDepthframeSource);
SafeRelease(pBodyIndexframeSource);
}

if (!m_pKinectSensor || FAILED(hr))
{
std::cout << “Kinect initialization failed!“ << std::endl;
return E_FAIL;
}

//skeletonImg用于画骨架、背景二值图的MAT
skeletonImg.create(cDepthHeight cDepthWidth CV_8UC3);
skeletonImg.setTo(0);

//depthImg用于画深度信息的MAT
depthImg.create(cDepthHeight cDepthWidth CV_8UC1);
depthImg.setTo(0);

return hr;
}


/// Main processing function
void CBodyBasics::Update()
{
//每次先清空skeletonImg
skeletonImg.setTo(0);

//如果丢失了kinect,则不继续操作
if (!m_pBodyframeReader)
{
return;
}

IBodyframe* pBodyframe = NULL;//骨架信息
IDepthframe* pDepthframe = NULL;//深度信息
IBodyIndexframe* pBodyIndexframe = NULL;//背景二值图

//记录每次操作的成功与否
HRESULT hr = S_OK;

//---------------------------------------获取背景二值图并显示---------------------------------
if (SUCCEEDED(hr)){
hr = m_pBodyIndexframeReader->AcquireLatestframe(&pBodyIndexframe);//获得背景二值图信息
}
if (SUCCEEDED(hr)){
BYTE *bodyIndexArray = new BYTE[cDepthHeight * cDepthWidth];//背景二值图是8为uchar,有人是黑色,没人是白色
pBodyIndexframe->CopyframeDataToArray(cDepthHeight * cDepthWidth bodyIndexArray);

//把背景二值图画到MAT里
uchar* skeletonData = (uchar*)skeletonImg.data;
for (int j = 0; j < cDepthHeight * cDepthWidth; ++j){
*skeletonData = bodyIndexArray[j]; ++skeletonData;
*skeletonData = bodyIndexArray[j]; ++skeletonData;
*skeletonData = bodyIndexArray[j]; ++skeletonData;
}
delete[] bodyIndexArray;
}
SafeRelease(pBodyIndexframe);//必须要释放,否则之后无法获得新的frame数据

//-----------------------获取深度数据并显示--------------------------
if (SUCCEEDED(hr)){
hr = m_pDepthframeReader->AcquireLat

评论

共有 条评论